Я не знаю, почему вы сталкиваетесь с такими трудностями ... Это должно помочь вам ... Вы можете определить свой класс как OlePublic и установить для него некоторые свойства, такие как примеры вверху. Вы можете установить эти свойства в любом месте с помощью других функций, которые не скрыты.
Если вам нужно получить определенные элементы OF какого-то другого «объекта», попробуйте создать экземпляр объекта и вставить его в свойство класса OlePublic ... см. Мой метод
DoSomethingElse
, который выполняет простой запрос NAME scatter к свойству 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, каждый из которых выставлен и может быть создан индивидуально. Вам не нужно создавать одно, чтобы создавать другое.
Есть ли какая-то особая причина, по которой вы пытаетесь создать один объект из другого? Вы можете иметь один объект, который предоставляет множество методов и свойств для выполнения всего, что вам нужно от VFP.
Если вы хотите, чтобы несколько классов объектов были открыты и находились под централизованным управлением, вы всегда можете создать свой первичный объект для связи, и ИТ-специалисты должны создать на нем экземпляр каждого «другого» класса. Затем предоставьте методы в вашем главном классе, чтобы обрабатывать связи между ними, чтобы разыграть все, что вам нужно.