我不知道为什么你会遇到这样的困难...这应该能帮助到你...你可以将你的类定义为OlePublic,并像顶部的示例一样设置一些属性。你可以在其他非隐藏函数中的任何地方设置这些属性。
如果你需要访问其他“对象”的某些元素,请创建该对象的实例并将其插入到OlePublic类的属性中...看看我的方法
DoSomethingElse
它对类的“SomeObject”属性进行了简单的散列名称调用。即使你没有显式返回它,但从VB中创建它时应该是可见的...
DEFINE CLASS VFPClassForVB as Session OLEPublic
cTmpFiles = ""
cCOMUser = ""
SomeObject = ""
FUNCTION Init()
*/ Who is user... always ignore the machine....
This.cCOMUser = SUBSTR( SYS(0), AT( "#", SYS(0)) +1 )
This.cTmpFiles = "somepath\"
*/ Unattended mode... any "MODAL" type dialog will throw error / exception
SYS(2335, 0 )
*/ ALWAYS HAVE EXCLUSIVE OFF FOR COM!!!
SET EXCLUSIVE OFF
*/ ALWAYS HIDE DELETED RECORDS!!!
SET DELETED ON
ENDFUNC
*/ Error handler at the CLASS level will always be invoked
*/ instead of explicit ON ERROR or TRY/CATCH handlers...
FUNCTION xError(nError, cMethod, nLine)
lcMsg = "User: " + SYS(0) + " Tmp:" + SYS(2023);
+ " Method: " + cMethod + " Error: " + STR( nError,5);
+ " Line: " + STR( nLine, 6 )
STRTOFILE( lcMsg, This.cTmpFiles + "COMLog.txt" )
*/ NOW, throw the COM Error...
COMReturnError( cMethod + ' Error:' + str(nError,5);
+ ' Line:' + str(nline,6);
+ ' Msg:' + message(), _VFP.ServerName )
RETURN
HIDDEN FUNCTION SomeOtherFunction( lcWhat String,;
lnThing as Integer ) as String
*/ Do something
RETURN 1
ENDFUNC
*/ Another completely visible function direct form VB
FUNCTION DoSomethingElse( SomeParameter as String ) as String
USE SomeTable
*/ Now, this object should be visible as a direct property in VB
SCATTER MEMO NAME This.SomeObject
ENDFUNC
ENDDEFINE
从你的示例来看,你的VB端...
Sub Test()
Set objTest = CreateObject("MySampleProject.VFPClassForVB")
objTest.DoSomethingElse( "I dont care" )
dim Something as objTest.SomeObject.ColumnFromTable
End Sub
您可以在代码类库中创建尽可能多的OlePublic类,以便公开并根据需要创建这些实例。如果这有助于您更接近目标,请告诉我,我们将继续努力。
我已经尝试了各种示例,但是看到您拥有的对象,两个都是VFP OleObject条目,每个都是公开的,并且可以单独创建。您不需要创建一个对象来创建另一个对象。
您是否有特定的原因要从另一个对象创建一个对象?您可以让一个对象公开一堆方法和属性,以执行您需要的任何操作。
如果您想公开多个对象类,并在中央控制下进行管理,您始终可以创建用于通信的主要对象,并由其创建每个“其他”类的实例。然后,在您的主类上公开方法以处理它们之间的通信,以执行您需要的任何操作。