我有一个.NET控件,我在Visual Studio中创建并为“任何CPU”构建,并尝试在PowerBuilder Classic 12.6应用程序中使用。在PowerBuilder中,我选择Insert> Control> OLE然后在Insert Control选项卡上选择我的控件,一切正常 - 这是在IDE内或构建为32位应用程序时。当应用程序以64位模式构建时,控件无法加载,它只显示为空白框,当代码尝试访问它时,会抛出错误,如“访问外部对象时出错”[函数/属性x ]”。
我已经使用32位和64位版本的regasm注册了控件,我甚至尝试构建一个64位版本的控件,看看它是否适用于64位应用程序。最后我发现我可以在PB中创建一个空的olecontrol并调用InsertClass在运行时插入我的对象,这适用于32位和64位应用程序(当我为两者注册控件时),但这不是“标准” “使用ActiveX控件的方法,有很多奇怪的显示怪癖与此相关(其中一个在我链接到下面的问题中描述)。到目前为止,我已经能够处理出现的大部分事情,但随着越来越多的问题不断出现,我真的希望尽可能回到标准的,无quirk的ActiveX方法。
InsertClass在运行时查找对象的事实,但在设计时插入ActiveX控件对我的64位应用程序不起作用,似乎向我表明32位PB IDE专门绑定到32位控件的位版本。
有没有人对创建.NET COM控件并在64位应用程序中将其用作ActiveX控件有任何经验或想法?
这是我之前提出的一个问题,它解释了我如何做到这一点,以及我遇到的许多“怪癖”之一: When activating OLEControl in my PowerBuilder application, toolbar items disappear