如何在我的C#应用程序中添加对基于C的DLL的引用?
我使用Microsoft Visual Studio 2008创建了一个C#应用程序,现在我想使用一个基于C的DLL如何在我的C#应用程序中添加对基于C的DLL的引用?,c#,c,dll,pinvoke,dllimport,C#,C,Dll,Pinvoke,Dllimport,我使用Microsoft Visual Studio 2008创建了一个C#应用程序,现在我想使用一个基于C的DLL 如何将对基于C的DLL的引用添加到Visual Studio 2008中的C#应用程序中?您不能在C#或VB.NET项目中添加对本机(非托管)DLL的引用。这根本不受支持。引用仅适用于其他托管DLL(即,您可能使用C#或VB.NET甚至C++/CLI编写的DLL) 但是,您仍然可以使用该DLL中的代码。诀窍是使用与从Win32 API调用函数相同的P/Invoke语法在运行时动态
如何将对基于C的DLL的引用添加到Visual Studio 2008中的C#应用程序中?您不能在C#或VB.NET项目中添加对本机(非托管)DLL的引用。这根本不受支持。引用仅适用于其他托管DLL(即,您可能使用C#或VB.NET甚至C++/CLI编写的DLL) 但是,您仍然可以使用该DLL中的代码。诀窍是使用与从Win32 API调用函数相同的P/Invoke语法在运行时动态调用它提供的函数 例如,假设您使用C++将以下代码编译成DLL:
extern "C" {
__declspec(dllexport) void AddNumbers(int a, int b, int* result)
{
*result = (a + b);
}
}
现在,假设您将该DLL编译为一个名为test.DLL
的文件,您可以通过向C#应用程序添加以下代码来调用该函数:
[DllImport("test.dll"), CallingConvention=CallingConvention.Cdecl)]
private static extern void AddNumbers(int a, int b, out int result);
public int AddNumbers_Wrapper(int a, int b)
{
int result;
AddNumbers(a, b, out result);
return result;
}
或者在VB.NET中,因为您显然正在使用它(尽管问题中有各种指示):
_
公共共享函数addNumber(ByVal a为整数,ByVal b为整数_
ByRef结果(作为整数)
端函数
公共函数AddNumbers_Wrapper(ByVal a为整数_
ByVal b作为整数)作为整数
将结果设置为整数
添加编号(a、b、结果)
返回结果
端函数
确保根据非托管方法的调用约定,适当设置了DllImport
属性的字段
介绍如何在Microsoft网站上开始使用p/Invoke。您不能在C#或VB.NET项目中添加对本机(非托管)DLL的引用。这根本不受支持。引用仅适用于其他托管DLL(即,您可能使用C#或VB.NET甚至C++/CLI编写的DLL) 但是,您仍然可以使用该DLL中的代码。诀窍是使用与从Win32 API调用函数相同的P/Invoke语法在运行时动态调用它提供的函数 例如,假设您使用C++将以下代码编译成DLL:
extern "C" {
__declspec(dllexport) void AddNumbers(int a, int b, int* result)
{
*result = (a + b);
}
}
现在,假设您将该DLL编译为一个名为test.DLL
的文件,您可以通过向C#应用程序添加以下代码来调用该函数:
[DllImport("test.dll"), CallingConvention=CallingConvention.Cdecl)]
private static extern void AddNumbers(int a, int b, out int result);
public int AddNumbers_Wrapper(int a, int b)
{
int result;
AddNumbers(a, b, out result);
return result;
}
或者在VB.NET中,因为您显然正在使用它(尽管问题中有各种指示):
_
公共共享函数addNumber(ByVal a为整数,ByVal b为整数_
ByRef结果(作为整数)
端函数
公共函数AddNumbers_Wrapper(ByVal a为整数_
ByVal b作为整数)作为整数
将结果设置为整数
添加编号(a、b、结果)
返回结果
端函数
确保根据非托管方法的调用约定,适当设置了DllImport
属性的字段
关于如何在Microsoft网站上开始使用p/Invoke。您尝试了什么?您阅读了哪些文档,文档中有哪些内容您不理解?您尝试了哪些内容?您阅读了哪些文档,哪些文档中您不了解?我下载了该组件。我怎样才能在我的简历中添加那个pinvokeVB2008@panchalbhargav例如我不知道。我从未使用过他们的工具,因为我发现自己编写定义更容易;我在那个网站上发现了很多错误。你试过阅读PInvoke网站上的说明吗?你不需要PInvoke.net组件,有VB.net语法的示例哦,你在使用VB.net?问题清楚地说是C#,甚至在我编辑它之前。。。我将把这两个都添加到我的答案中。@cody您需要使调用约定与upI下载该组件相匹配。我怎样才能在我的简历中添加那个pinvokeVB2008@panchalbhargav例如我不知道。我从未使用过他们的工具,因为我发现自己编写定义更容易;我在那个网站上发现了很多错误。你试过阅读PInvoke网站上的说明吗?你不需要PInvoke.net组件,有VB.net语法的示例哦,你在使用VB.net?问题清楚地说是C#,甚至在我编辑它之前。。。我会把这两个都加到我的答案中。@cody你需要让通话约定匹配起来