我有一个 C++/CLI DLL,它使用一些托管代码(用 C# 编写)。我想从 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
在函数声明之前,但随后我在体内使用托管类型时出错。如果我用空 stub (只是
return 1;
)和 #pragma unmanaged
替换函数的主体,函数仍然没有出现在 dumpbin
.那么我做错了什么?如何从 C++/CLI 类库项目中导出 C 函数?
最佳答案
应该是配置问题。我使用 Empty project
创建了一个新项目模板,已更改Configuration Type
至 Dynamic Library (.dll)
Common Language Runtime Support
至 Common Language Runtime Support (/clr)
在 General Configuration 中添加了对 System.Core
的引用和我在 Common Properties
中的 C# 程序集现在可以使用了。
我还添加了一个 .DEF 文件来处理名称修改(当然,def 文件的名称应该设置在 Linker -> Input -> Module Definition file
中)。
LIBRARY
EXPORTS
DoWork
希望能帮助别人。
关于.net - 从使用 .NET 代码的 C++/CLI DLL 导出 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12835924/