我有名为VssSdkd.dll的win32 DLL。它包含两个名为VssSdkServiceLogin和VssSdkMsg的类。
我需要在C#中导入VssDskServiceLogin类。我设置了 VssDskServiceLogin 对象的一些属性,并将其传递给 VssSdkMsg ,后者又调用了其他一些方法。
如何使用C#实现此目的。
答案 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);
}
这可能有所帮助。