我有一个使用一些托管代码(用 C# 编写)的 C++/CLI DLL。我想从 DLL 中导出一个纯 C 函数 - 它将使用LoadLibrary
和从非托管代码中调用GetProcAddress
。
在导出的函数中,我只需要创建一个实例并调用 C# 类的一种方法。所以我尝试了这个:
extern "C" __declspec( dllexport ) int __stdcall DoWork(
const wchar_t* Param1,
int Param2,
void* Param3)
{
WorkerNamespace::ManagedClass1 worker;
return worker.DoWork( gcnew String(Param1), Param2, IntPtr( Param3 ) );
}
它编译得很好,但是当我这样做时dumpbin CompiledDll.dll /exports
,没有导出函数。
我尝试#pragma unmanaged
在函数声明之前添加,但随后在主体内使用托管类型时出现错误。
如果我用一个空存根(只是return 1;
)和用替换函数的主体#pragma unmanaged
,该函数仍然不会出现在dumpbin
. 那么我做错了什么?如何从 C++/CLI 类库项目中导出 C 函数?