是否可以在C#中使用win32 DLL?

时间:2009-10-31 07:06:55

标签: c#

我有名为VssSdkd.dll的win32 DLL。它包含两个名为VssSdkServiceLogin和VssSdkMsg的类。

我需要在C#中导入VssDskServiceLogin类。我设置了 VssDskServiceLogin 对象的一些属性,并将其传递给 VssSdkMsg ,后者又调用了其他一些方法。

如何使用C#实现此目的。

5 个答案:

答案 0 :(得分:6)

  

我有名为VssSdkd.dll的win32 DLL。它   包含两个带有名称的类   VssSdkServiceLogin和VssSdkMsg。

     

在C#中,我需要导入   VssDskServiceLogin类。在课堂里   是我需要设置的一些属性   价值,发送信息   VssSdkMsg并调用另一个函数

     

我需要通过实现这些目标   C#代码。这是可能的,如果是的话,   如何?

用C ++(和其他Win32语言)编译的类不能与Dot NET语言相互作用。结构可能是如果小心的话。但是,Dot NET确实支持COM对象。

如果在CLR端使用[DllImport]属性标记(并且设置了相应的DllImportAttribute属性),则可以从Dot NET语言调用本机函数 - 并在Win32端导出。但是,这是一个非常重要的过程。我建议你抓一本关于这个主题的好书并从顶部开始。 SO可能不是解决这个问题的非常好的媒介。

答案 1 :(得分:2)

你可以用p / invoke和marshaling来做。阅读它,这是一个太复杂的主题,在SO答案中完全解释。

答案 2 :(得分:0)

我相信有时可能在C#中使用P / Invoke,但在处理类时,这可能变得非常非常困难。

我强烈建议您使用托管C ++为您的DLL创建一个C#包装器。

答案 3 :(得分:0)

我不知道这个link会直接解决您的问题,但我希望您能在Code Project找到一个很好的示例。托管C ++可能有点棘手,直到你习惯它,我认为语法从.NET 1.0 / 1.1更改为.NET 2.0。确保您知道要定位的.NET版本,并相应地搜索Code Project网站。

答案 4 :(得分:0)

您正在寻找的是与COM的互操作性。 我没有做太多工作,但可以给你一个示例代码。

[DllImport("user32.dll")]
private static extern int MessageBox(IntPtr hWnd, String
text, String caption, uint type);

static void Main(string[] args)
{
MessageBox(new IntPtr(0), "Hello, world!", "My box", 0);
}

这可能有所帮助。