c# - 为什么将 DllImport 返回值中的 char[] 替换为 IntPtr 或 StringBuilder 会导致我的程序不再找到正确的入口点?

标签 c# .net c interop pinvoke

编辑:我刚刚意识到这是定义为宏,而不是函数。如何将宏从 DLL 导入到 C#? (这可能是一个新问题)。

这与我刚才问的一个问题有关:

How Do I Properly Return A Char From An Unmanaged Dll To C#?

一些答案​​建议我将函数签名更改为 IntPtr 或 StringBuilder。我还在我的谷歌搜索中的一些网站上看到了这些解决方案,最著名的是 here . (还有其他的,但我没有时间寻找链接)。

函数签名:

[DllImport("api.dll")]       
internal static extern char[] errMessage(int err);

如果我更改返回类型,我的调用会抛出以下异常:

"Unable to find an entry point named 'errMessage' in DLL"

如果它不起作用,我无法想象人们会提出这个建议。我在这里做错了什么吗?有什么东西不见了吗?遗憾的是,我的 C/C++ 技能很糟糕,所以我可能会遗漏一些非常简单的东西。感谢您的帮助。

编辑:文档中的函数签名:

char * errMessage(int err);

最佳答案

编写一个 C++/CLI 包装器。这是弥合 C# 和非托管(旧)C/C++ 之间差距的一种非常简单和强大的方法。

关于c# - 为什么将 DllImport 返回值中的 char[] 替换为 IntPtr 或 StringBuilder 会导致我的程序不再找到正确的入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1758456/

相关文章:

c++ - 如何将c/c++回调函数转换为delphi

clang 表达式中未使用的值

C: 如何解析 Json 请求中的值?

c# - 什么是惯用代码?

c# - 无法解析设置类的依赖注入(inject)

c# - 将相同的扩展添加到 winform 中的多个控件

c# - 我怎样才能防止我的已编译库的用户查看代码?

.net - 无法让 razor 和 aspx 正常运行

c# - 如何使用 Sitecore MVC 解决 404 页面?

.net - 在 IIS 中部署 .PDB 文件。有什么好处吗?