以下是一个示例,展示了如何在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(&param);
            param.vt = VT_INT;
            param.intVal = 10;

            // 设置函数调用参数
            params.cArgs = 1;
            params.cNamedArgs = 0;
            params.rgdispidNamedArgs = NULL;
            params.rgvarg = &param;

            // 调用函数
            VariantInit(&result);
            hr = pComObject->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &params, &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对象的实现而有所不同,请根据实际情况进行调整。

C语言调用DLL或COM对象函数示例 - 详细指南

原文地址: https://www.cveoy.top/t/topic/qtSN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录