请解释后期绑定过程
Please explain the late binding process
我正在尝试制作一个简单的插件。开发人员文档指出:
Late bind to ETABS.exe, create an instance of the ETABSObject, and get a reference to the cOAPI interface.
我对如何延迟绑定到已经 运行 的 exe 感到很困惑。如果您能给我一个例子或指出正确的方向,我将不胜感激。这几天我一直在用头撞墙。
早期绑定
执行早期绑定时,对象被分配给声明为特定对象类型的变量。早期绑定对象基本上都是强类型对象或者静态类型对象。在编译期间检测和检查的早期绑定、方法、函数和属性会在应用程序执行之前执行其他优化。使用早期绑定的最大优势是性能和易于开发。
示例:
System.IO.FileStream FS ;
FS = new System.IO.FileStream("C:\temp.txt", System.IO.FileMode.Open);
上面的代码创建了一个变量FS来保存一个新的对象,然后将一个新的对象赋值给这个变量。 运行-time.The FileStream 是特定对象类型,分配给 FS 的实例是早期绑定。
在执行早期绑定时,编译器可以在编译时确保该函数存在并且可以在 运行 时调用。此外,编译器保证该函数采用准确数量的参数并且它们的类型正确,并且可以检查 return 值的类型是否正确。
后期绑定
相比之下,在后期绑定函数中,方法、变量和属性仅在 运行 时被检测和检查。这意味着编译器直到 运行 时间才知道什么样的对象或对象的实际类型或对象包含哪些方法或属性。 Late binding最大的优点是该类型的Objects可以持有任何对象的引用,但是缺少了early-bound objects的很多优点。
示例:
//The var keyword instructs the compiler to infer the type of the variable
// from the expression on the right side of the initialization statement.
var eTabsObj = null;//notice the var keyword
//instead of var you can use an interface variable to hold reference
// of late bind object
eTabsObj = CreateObject("<create an instance of ETABSObject>");//executed at runtime
以上代码不需要事先设置引用,实例创建和类型确定将在运行时发生。请务必注意,Late 绑定只能用于访问声明为 Public 的类型成员。访问声明为 Friend 或 Protected Friend 的成员会导致 运行 次错误。
为了回答您的具体问题,您在 运行 时间内创建了一个对象,这是有道理的,因为 ETABS.exe 的作者写道他不知道您想如何在 project.You 中使用它的代码以适合您要求的方式创建了一个对象。
注意我们如何使用 var 来保存对 ETABS 对象的引用,var 基本上是一种语法糖,它从被分配的对象推断对象类型。现在,您可以使用 ETABS class 实现的 接口变量 来保存对象的引用,而不是使用 var。
虽然执行后期绑定,但目标函数可能不存在。此外,目标函数可能不接受传递给它的参数,并且可能具有错误类型的 return 值。
希望对您有所帮助!
我正在尝试制作一个简单的插件。开发人员文档指出:
Late bind to ETABS.exe, create an instance of the ETABSObject, and get a reference to the cOAPI interface.
我对如何延迟绑定到已经 运行 的 exe 感到很困惑。如果您能给我一个例子或指出正确的方向,我将不胜感激。这几天我一直在用头撞墙。
早期绑定
执行早期绑定时,对象被分配给声明为特定对象类型的变量。早期绑定对象基本上都是强类型对象或者静态类型对象。在编译期间检测和检查的早期绑定、方法、函数和属性会在应用程序执行之前执行其他优化。使用早期绑定的最大优势是性能和易于开发。
示例:
System.IO.FileStream FS ;
FS = new System.IO.FileStream("C:\temp.txt", System.IO.FileMode.Open);
上面的代码创建了一个变量FS来保存一个新的对象,然后将一个新的对象赋值给这个变量。 运行-time.The FileStream 是特定对象类型,分配给 FS 的实例是早期绑定。
在执行早期绑定时,编译器可以在编译时确保该函数存在并且可以在 运行 时调用。此外,编译器保证该函数采用准确数量的参数并且它们的类型正确,并且可以检查 return 值的类型是否正确。
后期绑定
相比之下,在后期绑定函数中,方法、变量和属性仅在 运行 时被检测和检查。这意味着编译器直到 运行 时间才知道什么样的对象或对象的实际类型或对象包含哪些方法或属性。 Late binding最大的优点是该类型的Objects可以持有任何对象的引用,但是缺少了early-bound objects的很多优点。
示例:
//The var keyword instructs the compiler to infer the type of the variable
// from the expression on the right side of the initialization statement.
var eTabsObj = null;//notice the var keyword
//instead of var you can use an interface variable to hold reference
// of late bind object
eTabsObj = CreateObject("<create an instance of ETABSObject>");//executed at runtime
以上代码不需要事先设置引用,实例创建和类型确定将在运行时发生。请务必注意,Late 绑定只能用于访问声明为 Public 的类型成员。访问声明为 Friend 或 Protected Friend 的成员会导致 运行 次错误。
为了回答您的具体问题,您在 运行 时间内创建了一个对象,这是有道理的,因为 ETABS.exe 的作者写道他不知道您想如何在 project.You 中使用它的代码以适合您要求的方式创建了一个对象。
注意我们如何使用 var 来保存对 ETABS 对象的引用,var 基本上是一种语法糖,它从被分配的对象推断对象类型。现在,您可以使用 ETABS class 实现的 接口变量 来保存对象的引用,而不是使用 var。
虽然执行后期绑定,但目标函数可能不存在。此外,目标函数可能不接受传递给它的参数,并且可能具有错误类型的 return 值。
希望对您有所帮助!