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/iNHb 著作权归作者所有。请勿转载和采集!