2014-03-07 21 views
0

所以我有一个WPF解决方案。我添加了一个新项目并添加了一个CPP Dll项目。创建一个用于C#程序的CPP DLL

我用过这个例子。非常直截了当。

http://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w

这里是我的代码

CppTestDll.cpp

#include <stdio.h> 

extern "C" 
{ 
    __declspec(dllexport) void DisplayHelloFromDLL() 
    { 
     printf("Hello from DLL !\n"); 
    } 
} 

当我建立这个我其实做得到一个DLL现在,当

我去int o我的WPF应用程序,并尝试添加对此DLL的引用我得到此错误。

“到‘C:\ DIR \ testcppdll.dll’的引用无法添加请 确保该文件是可访问,并且它是一个有效的汇编 或COM组件。”

+0

你不能只是增加一个功能引用一个非.NET的dll库。你需要使用PInvoke。在这里阅读更多:http://msdn.microsoft.com/en-us/magazine/cc164123.aspx – lahsrah

回答

2

如果你在你举的例子来看:

创建一个简单的C#应用​​程序:

  • 启动Visual Studio .NET。转到文件 - >新建 - >项目。
  • 选择Visual C# 项目。 ... (您可以选择WPF项目)
  • 将名称提供给您的应用程序。按OK。到指定 类,加入以下两行:

[DllImport("TestLib.dll")] public static extern void DisplayHelloFromDLL();

在C#,关键字的extern表明,该方法是在外部实现。

您的代码应该是这个样子:

using System; 
using System.Runtime.InteropServices;  // DLL support 

class HelloWorld 
{ 
    [DllImport("TestLib.dll")] 
    public static extern void DisplayHelloFromDLL(); 

    public void SomeFunction() 
    { 
     Console.WriteLine ("This is C# program"); 
     DisplayHelloFromDLL(); 
    } 
} 

你没有一个参照添加到DLL - 你P/Invoke使用DLLImport

+1

我是一个白痴。谢谢 –

+0

您可以使用C++/CLI编写C++托管代码,这些代码可以从C#项目中作为普通.NET dll库导入。 http://stackoverflow.com/questions/10223186/c-cli-wrapper-for-native-c-to-use-as-reference-in-c-sharp – thepirat000