gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:26:16 28 4
gpt4 key购买 nike

我正在使用 C# 编写一个 DLL,它将从 Delphi Windows 应用程序访问,并且遇到了重新导出类/方法的问题。无论我尝试什么,似乎都没有导出任何内容。

我已经使用 Hans Passant 提供的记录方法创建了一个测试 DLL在 this question re UnmangedExports。

我使用以下代码创建了一个 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 正在导出测试方法,但它不在最终的 DLL 中?

最佳答案

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

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

那是你的 C# 程序集吗?

关于c# - DLL 不导出类/方法 C#/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864864/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com