Error with compiling DLL with intel compiler

2019-10-17 14:46发布

我试图从控制台编译DLL,而无需使用任何IDE和面临的下一个错误。

我写了这个代码:

test_dll.cpp

#include <windows.h>
#define DLL_EI __declspec(dllexport)

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved){
  return 1;
}
extern "C" int DLL_EI func (int a, int b){
  return a + b;
}

然后用命令编译icl /LD test_dll.cpp 。 我试图把这种func从另一个程序:

prog.cpp

int main(){
  HMODULE hLib;
  hLib = LoadLibrary("test_dll.dll");  
  double (*pFunction)(int a, int b);
  (FARPROC &)pFunction = GetProcAddress(hLib, "Function");
  printf("begin\n");
  Rss = pFunction(1, 2);
}

与编译icl prog.cpp 。 然后我运行它,它无法与标准窗口“程序不工作”。 也许有一个分段错误

我究竟做错了什么?

Answer 1:

检查两台LoadLibrary()GetProcAddress()成功,在这种情况下,他们是绝对不会为导出函数被调用func ,而不是"Function"作为参数指定到GetProcAddress()意味着函数指针将是NULL当尝试调用它是由。

函数指针的签名也不匹配导出函数的签名,导出的函数返回一个int和函数指针期待一个double

例如:

typedef int (*func_t)(int, int);

HMODULE hLib = LoadLibrary("test_dll.dll");
if (hLib)
{
    func_t pFunction = (func_t)GetProcAddress(hLib, "func");
    if (pFunction)
    {
        Rss = pFunction(1, 2);
    }
    else
    {
        // Check GetLastError() to determine
        // reason for failure.
    }
    FreeLibrary(hLib);
}
else
{
    // Check GetLastError() to determine
    // reason for failure.
}


文章来源: Error with compiling DLL with intel compiler