PowerBuilder调用外部VB6 ActiveX EXE公共对象

学习的同时习练PowerBuilder对VB6 ActiveX exe公共对象的调用,初步感觉PowerBuilder调用DLL还是要求比较严格的,APP和powerbuilder本身都比较脆弱、易崩溃,因此,

1. 直接调用外部DLL时,传递地址参数,尽量不传递字符串;

2. 从DLL返回时,尽量不回写传送的地址,而用export返回结果;

3. 用ActiveX exe非常安全,因为 Activex exe本身是外部运行的程序。

在链接的《VB6创建ActiveX exe简单方法》

VB6创建ActiveX exe简单方法_Mongnewer的博客-CSDN博客

中习练过Activex exe的创建,总结起来是在工程中模板中把自己要做的事情封装在CLASS中,然后加个模块,写个sub main() 过程即可。技巧是在 sub main()中读取命令行参数,避免直接点击误装入,另外是调用程序退出时清除掉这个进程。Activex EXE只做个简短回顾,下面是在powerbuilder中调用它的实践。

PowerBuilder调用外部VB6 ActiveX EXE公共对象_第1张图片

 程序的 Direct PBasic DLL是首次学习时对PowerBasic写的DLL的直接调用,VB6 ActivexEXE 是对 Activex EXE 公共对象的调用。

1. 首先在 Global 中定义对象和需要的变量

OLEObject MBFObj
Integer li_rc

2. 接下来在主窗体 open 时装入 activex EXE, 然后创建 OLEObject,将其 ConnectToNewObject 连接到 activex EXE中的那个唯一的类, 文件名.类名

Byte hExternCOM = 0
hExternCOM = Run("MBFMODIEEE.exe !@#$*&^%12348765", Minimized!)

IF hExternCOM = 1 THEN	//COM is succesfully loaded.
	MBFObj = CREATE OLEObject
	li_rc = MBFObj.ConnectToNewObject("MBFMODIEEE.MBFIEEECRC")
	
	IF li_rc < 0 THEN
   		DESTROY MBFObj
		MessageBox("Connecting to COM Object Failed",  &
   		"Error: " + String(li_rc))
		Return
	END IF
END IF

3. 在主窗体的 “VB6 ActivexEXE” 钮的click事件中加入调用代码,完成调用功能。

	sle_6.text = MBFobj.ModbusRoutines(10, "VERSION") 
	sle_7.text = MBFobj.ModbusRoutines(10, "AUTHOR") 
	
	sle_2.text = MBFobj.ModbusRoutines(1, sle_1.text) 
	sle_8.text = MBFobj.ModbusRoutines(5, sle_2.text) 
	
	sle_3.text = MBFobj.ModbusRoutines(2, sle_1.text) 
	sle_9.text = MBFobj.ModbusRoutines(6, sle_3.text) 

	sle_4.text = MBFobj.ModbusRoutines(3, sle_1.text) 	
	sle_10.text = MBFobj.ModbusRoutines(7, sle_4.text) 	

	sle_5.text = MBFobj.ModbusRoutines(4, sle_1.text) 	
	sle_11.text = MBFobj.ModbusRoutines(8, sle_5.text) 	
	
	sle_13.text = MBFobj.ModbusRoutines(9, sle_12.text) 

4. 在主窗体关闭时 DESTROY MBFObj   ,将创建的MBFObj销毁。

程序运行时在任务管理器中观察不到MBFMODIEEE进程,它被封闭在了 SAP AG Product File 进行之中,当退出PowerBuilder应用程序时,SAP AG 的全部支持进程自动销毁,不需单独对用户进程做处理。

你可能感兴趣的:(Activex.EXE调用,PowerBuilder调用,VB6,Activex,EXE)