【问题标题】:How to pass parameters to dll?如何将参数传递给dll?
【发布时间】:2014-12-08 15:41:12
【问题描述】:

我在 DLL 中有这个函数:

CPPLIBRARY_API int fnCPPLibrary(int a, int b)
{
    return a + b;
}

主要功能:

int main(){
    FARPROC myCppProc;
    HINSTANCE hDll;
    DWORD L;
    int result;

    hDll = LoadLibrary("CPPLibrary");

    if (hDll != NULL){
        myCppProc = GetProcAddress(hDll, "fnCPPLibrary");

        if (myCppProc != NULL){
            result = myCppProc();
        cout <<"Result from library: " <<result;
        int a;
        }
    }
}

当 fnCPPLibrary 没有参数时,我可以轻松调用它,但是如何将参数从程序传递到该 dll 函数?是简单还是需要一些复杂的代码?

【问题讨论】:

  • 您是否尝试查看documentation for GetProcAddress?它有一个例子。
  • 就像任何需要参数的函数一样调用它。
  • @crashmstr,是的,我读过,但我不明白。
  • @PaulMcKenzie 它抛出错误“要调用的参数太多”
  • @pawkondr 该示例有点含糊,但您需要转换函数指针以获得正确的签名。但是一个简单的Google of "GetProcAddress Example" 有其他例子。

标签: c++ dll loadlibrary


【解决方案1】:

函数指针的签名必须与您正在调用的函数相匹配。

不知道CPPLIBRARY_API 是什么:

typedef int (*DLLFunc)(int, int);
DLLFunc myCppProc;
//...
myCppProc = (DLLFunc)GetProcAddress(hDll, "fnCPPLibrary");  // Cast to function pointer
myCppProc(1, 2);  // call function

我不知道限定符 CPPLIBRARY_API 由什么组成,它可能很重要(可能是调用约定——您必须发布此信息)。但总的来说,这是你声明函数指针并使用GetProcAddress的方式。

【讨论】:

  • 感谢您的回答。它有效,但它必须是:DLLFunc myCppProc 而不是:DLLFunc myProc。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2012-04-16
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多