Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在C#中使用win32 DLL?_C# - Fatal编程技术网

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

是否可以在C#中使用win32 DLL?,c#,C#,我有一个名为VssSdkd.DLL的win32 DLL。它包含两个名为VssSdkServiceLogin和VssSdkMsg的类 我需要在C#中导入VssDskServiceLogin类。我正在设置VssDskServiceLogin对象的几个属性,并将其传递给vsssdkmg,后者反过来调用其他方法 如何使用C#实现这一点。您可以使用p/invoke和封送处理来实现。阅读相关内容,这是一个太复杂的主题,无法在SO答案中完整解释。您可以使用p/invoke和封送处理来完成。阅读相关内容,这是一

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

我需要在C#中导入VssDskServiceLogin类。我正在设置VssDskServiceLogin对象的几个属性,并将其传递给vsssdkmg,后者反过来调用其他方法


如何使用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++中定义类时,使用 Ref>代码>关键字来表示您正在制作.NET类,允许您在C.*中使用它。在这里解释太多了,需要一些学习,但我认为从长远来看,你会遇到更少的问题。谷歌有一些C++的例子。本质上,你导入你的DLL完全相同,就像你在C++中使用它一样(可能是为它做了什么)。在C++中定义类时,使用 Ref>代码>关键字来表示您正在制作.NET类,允许您在C.*中使用它。这里要解释的太多了,这需要一些学习,但我认为从长远来看,您会遇到较少的问题。您的示例与COM互操作无关。它显示了一个P/Invoke示例(顺便说一句,这将不起作用,因为
DllImport
声明了一个名为
MessageBox
的方法,而您的代码示例调用了一个名为
ShowBox
的方法)。抱歉,已编辑。我想打电话给MessageboxYour示例与COM互操作无关。它显示了一个P/Invoke的示例(根据