DLL 互操作/有趣的错误

Posted

技术标签:

【中文标题】DLL 互操作/有趣的错误【英文标题】:DLL interop / interesting error 【发布时间】:2009-05-22 03:05:35 【问题描述】:
char ARRAY[1024]; // <-- global

以下代码有效

myFunctionInDll("some string"); // everything ok

下面的代码不起作用

myFunctionInDll(ARRAY); // after compilation the entry point of DLL cannot be found

因此,总而言之,如果我将“静态字符串”传递给我的 dll 中的函数,则 dll 可以完美地编译和加载。但是,如果我填充全局数组(字符),然后尝试将其传递给我的函数,它会再次编译,但是当我尝试从我的 C# 应用程序调用函数时,我得到“找不到入口点”。这真的很奇怪,我找不到原因......

谢谢鲁。

有人知道为什么吗?

【问题讨论】:

myFunctionInDll 的函数原型是什么? 【参考方案1】:

您是编写互操作还是仅使用 .NET 生成的互操作类?如果以后试试

string myStr = "some string";
myFunctionInDll(myStr);

希望对您有所帮助。

【讨论】:

谢谢乔。这听起来违反直觉,但我后来意识到我实际上做的事情是正确的,这就是为什么它没有工作......这是一个 uni 项目的 rootkit 测试的一部分,我意识到该模块被隐藏了,这就是为什么字符串函数无法传递给 dll,因为它看不到它!实际上很有趣:)

以上是关于DLL 互操作/有趣的错误的主要内容,如果未能解决你的问题,请参考以下文章

将 C# 函数指针传递到 C++/CLI 互操作 dll

如何在vb6中注册一个不能用作com互操作的.net DLL?

无法嵌入互操作类型“dsdll.hisdllClass

与 C# 控制台应用程序互操作 C++ (DLL) 的问题

Microsoft 索引服务 Cisso.dll 互操作库:4 字节整数的上限?

与 php 和 java 互操作的 C# dll