从使用.NET代码的C ++ / CLI DLL导出C函数

时间:2012-10-11 09:02:18

标签: .net c interop c++-cli

我有一个C ++ / CLI DLL,它使用一些托管代码(用C#编写)。我想从DLL导出一个纯C函数 - 它将使用LoadLibraryGetProcAddress从非托管代码调用。

在导出的函数中,我只需要创建一个实例并调用一个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替换函数的主体,则函数仍然不会显示在{{1 }}。那么我做错了什么?如何从C ++ / CLI类库项目导出C函数?

1 个答案:

答案 0 :(得分:4)

一定是配置问题。我使用Empty project模板创建了一个新项目,已更改

Configuration TypeDynamic Library (.dll)

Common Language Runtime SupportCommon Language Runtime Support (/clr)

在“常规配置”中添加了对System.Core中的Common Properties和我的C#程序集的引用,现在可以正常运行。

我还添加了一个.DEF文件来处理名称修改(def文件的名称当然应该在Linker -> Input -> Module Definition file中设置)。

LIBRARY
EXPORTS
DoWork

希望能帮助别人。

相关问题