DLL不导出类/方法C#/ C ++

时间:2016-06-16 16:38:44

标签: c# c++ dll dllexport

我正在使用C#编写DLL,这将从Delphi Windows应用程序访问,并且已经解决了导出类/方法的问题。无论我尝试什么,似乎都没有出口。

我使用Hans Passantthis question unmangedExports中{{3}}提供的文档化方法创建了一个测试DLL。

我使用以下代码创建了一个C#类库项目:

namespace ExportTestCS
{
  public class ExpTest
  {
    public static void Test()
    {
      Console.WriteLine("Hi!");
    }
  }
}

和C ++'包装'做出口:

extern "C" __declspec(dllexport)

void  __stdcall Test()
{
    ExportTestCS::ExpTest::Test();
}

C ++项目引用了C#项目并且所有构建都正常,但是当我在DLL上运行dumpbin / exports时,没有任何导出:

dumpbin /exports C:\Temp\ExportTest\ExportTestCS\Release\ExportTest.dll

Dump of file C:\Temp\ExportTest\ExportTestCS\Release\ExportTest.dll

File Type: DLL

  Summary

        2000 .reloc
        2000 .rsrc
        2000 .text

C:\Program Files (x86)\Microsoft Visual Studio 14.0>

我已经针对调试和发布的构建产生的所有dll运行dumpbin,它们都给出了相同的结果。

因此,我的问题是 - 我做错了什么?我花了很长时间来搜索类似的问题,但它们似乎都是使用C ++包装器或UnmangedExports解决的。

这两个项目都在为x86 / win32构建,并且具有相同的目标框架(4.5.2)。我尝试过静态类的各种组合,没有类,__ clrcall / __ stdcall等,但无济于事。

我之前也尝试过UnmanagedExports NuGet包,但没有成功(这就是我找到Hans'的答案)。

提前感谢您的帮助!

完成所有评论后(谢谢!)我已经确认它是一个动态库项目,我在C ++项目中创建了一个新文件夹,并将其设置为输出文件夹。构建现在将.lib,.exp,.pdb,.dll和.dll.metagen文件放入该文件夹,这是构建时输出选项卡中报告的文件夹。但仍然没有快乐,dumpbin的输出与以往一样!

当我对新输出文件夹中的.lib文件运行dumpbin时,我得到了这个:

Dump of file C:\Temp\ExportTest\ExportTestCPP\ExportTest\Output\exporttest.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  _Test@0

  Summary

          CC .debug$S
          14 .idata$2
          14 .idata$3
           4 .idata$4
           4 .idata$5
          10 .idata$6

C:\Program Files (x86)\Microsoft Visual Studio 14.0>

所以看起来.lib正在导出Test方法,但它不在最终的DLL中?

2 个答案:

答案 0 :(得分:1)

我刚尝试了你的例子,当我在C ++ dll上运行dumpbin时,它对我有用,但是当我对C#dll运行时,它给你的结果与你的相同。

Dump of file C:\Temp\ExportTest\ExportTestCS\Release\ExportTest.dll

那是你的C#程序集吗?

答案 1 :(得分:0)

问题一定是我设置项目的方式。我从头开始了,一切正常。

当我设置原始ExportTest项目时,我无意中为C#项目创建了一个Windows Universal类库,虽然我意识到并将其更改为标准的Windows类库项目(删除了原始文件并创建了一个新项目)我相信它必须在解决方案配置中留下一些阻止DLL导出的东西。

非常感谢所有回答/评论的人!