Ale*_*lex 4 .net c interop c++-cli
我有一个 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 ) );
}
它编译得很好,但是当我执行 a 时dumpbin CompiledDll.dll /exports,没有导出函数。
我尝试#pragma unmanaged在函数声明之前添加,但随后在主体内使用托管类型时出现错误。
如果我用一个空存根(只是return 1;)和用替换函数的主体#pragma unmanaged,该函数仍然没有出现在dumpbin. 那么我做错了什么?如何从 C++/CLI 类库项目中导出 C 函数?
应该是配置问题。我使用Empty project模板创建了一个新项目,更改了
Configuration Type 到 Dynamic Library (.dll)
Common Language Runtime Support 到 Common Language Runtime Support (/clr)
在常规配置中添加了对System.Core和我的 C# 程序集的引用,Common Properties现在它可以工作了。
我还添加了一个 .DEF 文件来处理名称修改(当然,def 文件的名称应该在 中设置Linker -> Input -> Module Definition file)。
LIBRARY
EXPORTS
DoWork
希望能帮助别人。