c# - 源 C dll 中是否需要 dllexport 才能通过 [DllImport] 在 C# 中使用?

标签 c# c pinvoke marshalling dllimport

我正在尝试围绕 C.dll(pbmman32.dll,如果有人熟悉它)编写一个包装函数以与 c# 一起使用。

查看源代码的头文件,尽管它们确实使用了 extern "C"{},但它们似乎并未实现 __declspec(dllexport)。我仍然可以在缺少 dllexport 行的情况下调用该 dll 中的函数吗?

例如:

BOOL PBM_Version (TCHAR* Buffer, WORD* Version, DWORD Size)

进入:

[DllImport("pbmman32.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
public static extern bool PBM_Version(StringBuilder Buffer, StringBuilder Version, System.UInt32 Size);

最佳答案

__declspec(dllexport) 是将函数标记为可导出的便捷方法,但这不是唯一的方法(例如,它们可能已使用 .def 文件导出。

您应该能够查询 DLL 以获取所有导出的函数(您可以使用类似 http://www.dependencywalker.com/ 的东西)。如果您要调用的电话已导出,那么您就可以开始了。

关于c# - 源 C dll 中是否需要 dllexport 才能通过 [DllImport] 在 C# 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880042/

相关文章:

c - 如何精确地将 float 转换为二进制

mysql - 如何使用c语言连接并插入记录到mysql?

c# - 在 F# 中实现返回 Task<T> 的 C# 方法

c# - 尝试在 Unity 中自动运行单元测试

c++ - 特殊的简单随机数发生器

c# - 将 C# 结构的指针传递给 C++ API

c# - 将 C header 转换为 C# - 结构内固定字符数组的 ByValArray 与 ByValTStr

c# - 将 DLL c++ 事件注册到 C#

c# - 如何在 asp.net mvc 3 项目中路由 .aspx 页面?

C# 避免重复代码,使用泛型