我尝试了下面显示的代码来调用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'
这些是我得到的错误
答案 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;
}