2012-08-03 56 views
1

我想写一个WPF应用程序,它使用C++中定义的函数。 C++应用程序被编译为一个DLL。DllImport不工作

我在做的是使用DllImport属性来导入函数并使用它。这在我的机器上正常工作,但是当我尝试在另一台机器上运行我的WPF应用程序时,它给出了“无法找到DLL”错误。

我的C#(WPF)代码的摘录:

[DllImport("Dll.dll")] 
public static extern int MyFunc(); 

public MainWindow() 
{ 
    InitializeComponent(); 
    MessageBox.Show("Starting"); 
    try 
    { 
    MessageBox.Show(MyFunc().ToString()); 
    } 
    catch (Exception exc) 
    { 
    while (exc != null) 
    { 
     MessageBox.Show(exc.Message); 
     exc = exc.InnerException; 
    } 
} 

我的C++代码:

extern "C" __declspec(dllexport) int MyFunc() { 
    return 3; 
} 

任何人都可以看到我的错误可能是什么?

在此先感谢您的帮助!

编辑:它会出现的问题是,依赖项“MSVCR100D”不存在。我的理解是,这是我安装的VC++ Redistributable软件包中的一个文件,无济于事。

回答

5

您的DLL可能依赖于其他机器上未安装的其他DLL。您可以使用Dependency Walker检查依赖关系。

典型的缺失依赖关系是Visual Studio C/C++运行时库。如果他们错过了,只需谷歌。微软为他们提供可再发行的软件包。

+0

谢谢。我会尝试这两个。 – JonaGik 2012-08-03 09:16:45

+0

我使用Dependency Walker对应用程序进行了剖析,它没有显示我在其分析中使用的DLL(因此,除了这本身就是一个问题,我无法找到DLL的依赖关系) – JonaGik 2012-08-03 09:33:46

+0

分析C++ DLL与依赖性沃克,而不是C#之一。如果MSVCR100D.dll丢失,则需要从调试版本切换到发布版本,因为MSVCR100D.dll(D for debug)可能不会分发,也不是可重新发布的软件包的一部分。 – Codo 2012-08-03 17:03:47

0

dll是否也注册在另一台机器上?尝试设置构建ACtion内容和复制到输出文件夹始终为DLL文件

+0

这两个构建命令是做什么的? – JonaGik 2012-08-03 09:21:19