是否可以在C#中使用win32 DLL?
我有一个名为VssSdkd.DLL的win32 DLL。它包含两个名为VssSdkServiceLogin和VssSdkMsg的类 我需要在C#中导入VssDskServiceLogin类。我正在设置VssDskServiceLogin对象的几个属性,并将其传递给vsssdkmg,后者反过来调用其他方法是否可以在C#中使用win32 DLL?,c#,C#,我有一个名为VssSdkd.DLL的win32 DLL。它包含两个名为VssSdkServiceLogin和VssSdkMsg的类 我需要在C#中导入VssDskServiceLogin类。我正在设置VssDskServiceLogin对象的几个属性,并将其传递给vsssdkmg,后者反过来调用其他方法 如何使用C#实现这一点。您可以使用p/invoke和封送处理来实现。阅读相关内容,这是一个太复杂的主题,无法在SO答案中完整解释。您可以使用p/invoke和封送处理来完成。阅读相关内容,这是一
如何使用C#实现这一点。您可以使用p/invoke和封送处理来实现。阅读相关内容,这是一个太复杂的主题,无法在SO答案中完整解释。您可以使用p/invoke和封送处理来完成。阅读相关内容,这是一个太复杂的主题,无法在如此简单的回答中进行充分解释。我相信在C#中通过p/Invoke有时是可能的,但在处理类时,这可能会变得非常非常困难
<>我强烈推荐使用托管C++来为您的DLL创建一个C包装。 <>我强烈推荐使用管理C++来为您的DLL创建一个C包装,而 < P>我不知道这会直接解决您的问题,但我希望您能找到一个如何在这个问题上做的好例子。托管C++在你习惯之前有点棘手,我认为语法从.NET 1/1.1变为.NET 2。确保您知道您要针对的.NET版本,并相应地搜索该网站。我不知道这会直接解决您的问题,但我希望您能在网站上找到一个很好的示例来说明如何做到这一点。托管C++在你习惯之前有点棘手,我认为语法从.NET 1/1.1变为.NET 2。确保您知道您要针对的.NET版本,并相应地搜索该网站 我有一个名为VssSdkd.DLL的win32 DLL。信息技术 包含两个具有名称的类 VssSdkServiceLogin和VssSdkMsg 在C#中,我需要导入 VssDskServiceLogin类。在课堂上 我需要设置一些属性 值,将信息发送到 VssSdkMsg并调用另一个函数 我需要通过以下方式实现这些目标: C代码。这可能吗?如果可能, 怎么做 <> >用C++编译的类(和其他Win32语言)不能与点网语言相结合。如果小心,结构可能会损坏。不过,dotnet确实支持COM对象 如果本机函数在CLR端标记有
[DllImport]
属性(并且设置了相应的DllImportAttribute
属性),并在Win32端导出,则可以从.NET语言调用本机函数。然而,这是一个非常重要的过程。我建议你抓起一本关于这个主题的好书,从头开始。因此,这可能不是解决这个问题的一个很好的媒介
我有一个名为VssSdkd.DLL的win32 DLL。信息技术
包含两个具有名称的类
VssSdkServiceLogin和VssSdkMsg
在C#中,我需要导入
VssDskServiceLogin类。在课堂上
我需要设置一些属性
值,将信息发送到
VssSdkMsg并调用另一个函数
我需要通过以下方式实现这些目标:
C代码。这可能吗?如果可能,
怎么做
<> >用C++编译的类(和其他Win32语言)不能与点网语言相结合。如果小心,结构可能会损坏。不过,dotnet确实支持COM对象
如果本机函数在CLR端标记有
[DllImport]
属性(并且设置了相应的DllImportAttribute
属性),并在Win32端导出,则可以从.NET语言调用本机函数。然而,这是一个非常重要的过程。我建议你抓起一本关于这个主题的好书,从头开始。因此,它可能不是解决这个问题的一个很好的媒介。可能您正在寻找的是与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);
}
这可能会有所帮助。您可能正在寻找与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);
}
这可能会有所帮助。最好在你的问题标题中再加一点细节:“在C#中不可能”太模糊了。我会帮你修改拼写。你这里有一个非常类似的问题(间隔2小时):也许偶尔给人们一个回答和接受的机会。最好在你的问题标题中多加一点细节:“在C#中不可能”太模糊了。我会为你修改拼写。你在这里有一个非常相似的问题(2小时分开):也许给人们一个机会回答和接受一次,在一些GooGoC++的例子中。本质上,你导入你的DLL完全相同,就像你在C++中使用它一样(可能是为它做了什么)。在C++中定义类时,使用
DllImport
声明了一个名为MessageBox
的方法,而您的代码示例调用了一个名为ShowBox
的方法)。抱歉,已编辑。我想打电话给MessageboxYour示例与COM互操作无关。它显示了一个P/Invoke的示例(根据