Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# C和.NET Framework 3.5中的后期绑定_C#_.net 3.5_Late Binding - Fatal编程技术网

C# C和.NET Framework 3.5中的后期绑定

C# C和.NET Framework 3.5中的后期绑定,c#,.net-3.5,late-binding,C#,.net 3.5,Late Binding,我正在尝试将此代码转换为C.NETFramework3.5,但该版本不支持后期绑定。如果我使用的是4.0,我会使用动态类型,但现在这不是一个选项 使事情复杂化的是,我真正想要创建的对象atl3270Tool是在一个参数内创建的。我们将不胜感激 Dim atl3270Tool Dim ErrMsg As String Dim S_OK As UInt16 = 0 Dim atlDirectorObject = CreateObject("atlDirectorObject.atlDirector"

我正在尝试将此代码转换为C.NETFramework3.5,但该版本不支持后期绑定。如果我使用的是4.0,我会使用动态类型,但现在这不是一个选项

使事情复杂化的是,我真正想要创建的对象atl3270Tool是在一个参数内创建的。我们将不胜感激

Dim atl3270Tool
Dim ErrMsg As String
Dim S_OK As UInt16 = 0
Dim atlDirectorObject = CreateObject("atlDirectorObject.atlDirector")
If atlDirectorObject.CreateTool("3270", 1, True, True, 0, atl3270Tool, ErrMsg) <> S_OK Then
    'Terminate
End If

在vb.net中,后期绑定很容易实现。因此,利用.NET对用不同语言编写代码的支持,添加一个vb.NET类库项目来包装COM组件


标识符名称上的atl前缀很奇怪。ATL是ActiveX模板库的缩写,是一个非常流行的COM组件编写的C++库。默认情况下,它会创建支持双绑定的服务器,包括后期绑定和早期绑定。对于早期绑定,您需要一个类型库,默认情况下,它会嵌入到ATL项目中的可执行文件中。因此,请确保您没有在这里浪费编写早期绑定的C代码的机会。项目+添加引用,浏览选项卡,选择DLL。如果您没有收到投诉,那么您就是黄金,请使用对象浏览器查看生成的互操作库。

看起来您正在尝试将vb代码转换为.net 3.5中的c。您遇到的问题是使atDirectoryObject与c一起工作。我建议你看看这些主题1-2-只是一个简短的说明,在C或VB中没有动态键入。它们都是静态语言。我永远也不会明白为什么C决定用他们的动态关键字来迷惑一群人。注意:有时,使用早期绑定无法轻松地在C中构造COM对象的实例。您必须使用该类来动态创建对象的实例。如果发生这种情况,请使用Activator.CreateInstancetypeName。这就是所谓的后期绑定:是的,这是一个非常有限的后期绑定示例。但在这种情况下,它的唯一用途是因为有时COM对象的构造函数对.NET是隐藏的。与Net4.0中的dynamic关键字不同,他仍然无法轻松地调用以这种方式实例化的对象上的方法。