6

这是给所有 C# 大师的。我已经为此苦苦挣扎了一段时间,在网上尝试了各种建议,但无济于事。该操作发生在 Windows Mobile 5.0 中。

我有一个名为 MyDll.dll 的 DLL。在 MyDll.h 我有:

extern "C" __declspec(dllexport) int MyDllFunction(int one, int two);

MyDll.cpp中MyDllFunction的定义是:

int MyDllFunction(int one, int two)
{
    return one + two;
}

C# 类包含以下声明:

[DllImport("MyDll.dll")]
extern public static int MyDllFunction(int one, int two);

在同一个类中,我通过以下方式调用 MyDllFunction:

int res = MyDllFunction(10, 10);

这就是该死的东西不断给我“找不到 PInvoke DLL 'MyDll.dll'”的地方。我已经验证我实际上可以在系统调用上执行 PInvoke,例如“GetAsyncKeyState(1)”,声明为:

    [DllImport("coredll.dll")]
    protected static extern short GetAsyncKeyState(int vKey);

MyDll.dll 与可执行文件位于同一文件夹中,我也尝试将其放入 /Windows 文件夹中,没有任何更改也没有成功。非常感谢任何建议或解决方案。

4

4 回答 4

4

我有同样的问题,但是这次涉及的平台没有明显的区别。为什么它应该是“正常”的东西被记录得如此糟糕,如此困难,最糟糕的是如此“片状”。是否有任何工具可以让我进入我的 PPC 模拟器,并逐步检查 (a) dll 是否在 CLR 期望的位置(我已将它放在同一个目录和模拟器上的 windows 目录中 - 我可以看到它在那里使用模拟器文件资源管理器),(b)CLR可以加载它(有足够的内存等),(c)CLR可以找到存在的功能(如果我能超越愚蠢的'can '找不到 dll' 错误)

我很想强迫盖茨或任何“windows mobile”团队使用他们创造的废话。

于 2009-01-06T11:14:39.597 回答
2

也许这似乎是一件显而易见的事情,但您是否正在为正确的 CPU 架构编译本机 DLL?IIRC,Windows Mobile 在多个 CPU 架构上运行。

于 2008-11-26T08:27:32.663 回答
0

您列出的异常和您在问题中输入的 pinvoke 签名具有不同的名称:分别为 MyDll.dll 和 ThreadBenchLib.dll。那是错字还是问题?

如果不是问题,请尝试在依赖中打开 DLL 。由于未满足的依赖关系,DLL 加载可能会失败。

于 2008-11-26T07:55:38.267 回答
0

我有同样的问题。我使用 Depends.exe 来查找 WinCE dll 依赖项,它取决于调试 dll。(MSVCR90D.dll) 为了解决这个问题,我编译了一个发布版本,并确认了依赖关系,之后它就可以正常工作了。

我希望能有所帮助

于 2013-04-25T21:44:53.680 回答