C语言调用DLL或COM对象函数示例 - 详细指南
以下是一个示例,展示了如何在C语言中调用一个DLL或COM对象的函数:
调用DLL函数示例:
#include <stdio.h>
#include <windows.h>
// 声明DLL函数的原型
typedef void (*MyFunction)(int);
int main() {
HINSTANCE hDLL;
MyFunction myFunction;
// 加载DLL
hDLL = LoadLibrary('mydll.dll');
if (hDLL != NULL) {
// 获取函数地址
myFunction = (MyFunction)GetProcAddress(hDLL, 'myFunction');
if (myFunction != NULL) {
// 调用函数
myFunction(10);
} else {
printf('无法获取函数地址\n');
}
// 卸载DLL
FreeLibrary(hDLL);
} else {
printf('无法加载DLL\n');
}
return 0;
}
调用COM对象函数示例:
#include <stdio.h>
#include <windows.h>
int main() {
HRESULT hr;
IDispatch* pComObject;
DISPID dispid;
VARIANT result;
DISPPARAMS params;
VARIANTARG param;
EXCEPINFO excepInfo;
UINT argErr;
// 初始化COM
CoInitialize(NULL);
// 创建COM对象
hr = CoCreateInstance(CLSID_MyComObject, NULL, CLSCTX_ALL, IID_IDispatch, (void**)&pComObject);
if (SUCCEEDED(hr)) {
// 获取函数的DISPID
hr = pComObject->GetIDsOfNames(IID_NULL, L'myFunction', 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (SUCCEEDED(hr)) {
// 设置函数参数
VariantInit(¶m);
param.vt = VT_INT;
param.intVal = 10;
// 设置函数调用参数
params.cArgs = 1;
params.cNamedArgs = 0;
params.rgdispidNamedArgs = NULL;
params.rgvarg = ¶m;
// 调用函数
VariantInit(&result);
hr = pComObject->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, ¶ms, &result, &excepInfo, &argErr);
if (SUCCEEDED(hr)) {
// 处理函数返回值
printf('函数返回值:%d\n', result.intVal);
} else {
printf('函数调用失败\n');
}
} else {
printf('无法获取函数的DISPID\n');
}
// 释放COM对象
pComObject->Release();
} else {
printf('无法创建COM对象\n');
}
// 释放COM
CoUninitialize();
return 0;
}
请注意,上述示例中的代码是基于Windows平台的,调用DLL函数时使用了Windows API函数,调用COM对象函数时使用了COM接口。具体的调用方式可能因为DLL或COM对象的实现而有所不同,请根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/qtSN 著作权归作者所有。请勿转载和采集!