编辑:我刚刚意识到这是定义为宏,而不是函数。如何将宏从 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/