如何在C ++ Builder中动态声明C#dll函数

时间:2019-05-16 00:09:16

标签: c++

我尝试了下面显示的代码来调用c#dll函数(COM),但是当我这样做时,我得到了以下错误:“无效使用命名空间'MaxElementFn'”

我的猜测是,也许我在c ++生成器中错误地调用了c#dll函数。任何建议将不胜感激。预先谢谢你。

#include <Windows.h>
#include <cstdio>

using MaxElementFn = int(__stdcall *) (int a, int b);

int main()

{

  HMODULE mod = LoadLibraryA("ExportedCodeSolution.dll");


  MaxElementFn maxElement = reinterpret_cast<MaxElementFn>(GetProcAddress(mod, "maxElement"));


  std::printf("max: %d\n", maxElement(1, 2));


}

[BCC32 Error] Unit1.cpp(145): E2070 Invalid use of namespace 'MaxElementFn'
[BCC32 Error] Unit1.cpp(151): E2451 Undefined symbol 'MaxElementFn'

这些是我得到的错误

1 个答案:

答案 0 :(得分:0)

// helper template
template<typename T> 
bool GetFuncPointer(HMODULE module, const char* name, T& ptr)
{
  ptr = (T)GetProcAddress(module, name);
  if(!ptr) std::printf("function not found in dll: %s\n", name);
  return ptr != nullptr;
}

// declare func pointer
int (__stdcall * maxElement) (int, int) = nullptr;

int main()
{
    HMODULE mod = LoadLibraryA("ExportedCodeSolution.dll");

    // make sure we actually have the function before calling
    if(GetFuncPointer(mod, "maxElement", maxElement))
    {
      std::printf("max: %d\n", maxElement(1, 2));
    }

    return 0;
}