将C ++ DLL导入C#智能设备应用程序

时间:2011-04-14 09:39:17

标签: c# c++ dllimport dllexport smart-device

在我查阅了大量的博客和网页并尝试了几乎人们解释的所有内容之后,我就是在问这个问题。

将C ++ Win32 DLL导入C#Windows应用程序没有问题。它实际上是直截了当的。

但我要做的是将C ++ DLL导入C#“智能设备应用程序”,特别是使用Visual Studio 2005。

在我的(TestDLL.dll)C ++ DLL源文件中,我有以下几行:

#if defined (__cplusplus)
extern "C" {
#endif

    __declspec(dllexport) void __cdecl foo();

#if defined (__cplusplus)
};
#endif

extern void __cdecl foo()
{

}

我的C#包装器(Wrapper.cs)类具有以下内容:

[DllImport(TestDLL.dll)]
private static extern void foo();

public static void fooCS()
{
    foo();
}

我的C#驱动程序类调用以下内容:

Wrapper.fooCS();

我将Pocket PC 2003设备连接到PC,然后我开始调试并运行程序。我收到以下错误消息:

  

MissingMethodException:PInvoke DLL   

我双重检查了我的DLL位置,所以它不是问题所在。然后我尝试使用Visual Studio 2005中的许多不同模板。

  • MFC智能设备DLL
  • MFC智能设备
  • 应用程序Win32智能设备
  • Project ATL智能设备项目
  • Win32 DLL

但似乎没有任何效果。始终是相同的运行时错误。

我还尝试在构建解决方案时更改CPU配置。但没有帮助。

所以我现在正在寻求专家的帮助。

仅供参考,我的设备有以下平台:

  • Windows Mobile 6 Classic
  • CE OS 5.2.1433
  • 处理器:ARM920T

开发环境是......

  • Windows 7 64位
  • Visual Studio 2005

提前谢谢你,

1 个答案:

答案 0 :(得分:1)

抱歉,我真的很傻 应用程序无法加载DLL文件的原因是因为我在移动设备上运行调试。它引起了路径问题。

所以我手动将DLL文件和应用程序的EXE文件复制到移动设备并运行程序。它工作得很好。
汉斯(评论者),你是对的。谢谢。 =)

现在,我的问题现在变成了我可以轻松调试这个问题的方法。

我目前知道的唯一方法是手动将DLL和EXE文件的发布版本复制到移动设备并进行测试。 =(

有人知道更好的方法吗?