Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
WwDotNetBridge
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Visual FoxPro et .NET
Titre:
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01617874
Message ID:
01618186
Vues:
46
Hi Rick,

Based on your excellent article that is provided with the wwDotNetBridge I actually decided to try a simpler route now without a bridge. I build a wrapper .NET library, I am able to run the code on my development machine like this
LOCAL loOriginalAddress as SysManager.Address
LOCAL loVerifiedAddress as SysManager.VerifiedAddress
loOriginalAddress = CREATEOBJECT("SysManager.Address")
loOriginalAddress.Address1 ="2170 S Josephine St Unit 1&/>"
loOriginalAddress.Address2 = ""
loOriginalAddress.City =  "Denver"
loOriginalAddress.Country = "Bad"
loOriginalAddress.State = "CO"
loOriginalAddress.Zip = "80210"


loVerifiedAddress = CREATEOBJECT("SysManager.VerifiedAddress")

loVerifiedAddress = loVerifiedAddress.VerifyAddress(loOriginalAddress)

?loVerifiedAddress.Result

?loVerifiedAddress.Country
So, the problem will be to register that component for our clients - I am wondering if I should use your RegisterDotNetComponent from the older article as is?

Thanks again.

>It's already released on Github...
>
>https://github.com/RickStrahl/wwDotnetBridge
>
>Don't forget to star the repro if you use the code.
>
>+++ Rick ---
>
>>Wow, that would be great when supported. Do you know when you're going to release this new version (sorry for the rush)?
>>
>>I can either ask my colleague for the wrapper method or wait for that new version of the bridge.
>>
>>Thanks a lot again.
>>
>>>This is currently not supported. You can only use ByRef parameters if you're calling .NET directly.
>>>
>>>I'm adding this functionality as we speak and it'll look like this:
>>>
>>>
>>>loNet = loBridge.Createinstance("Westwind.WebConnection.TypePassingTests")
>>>
>>>*** Create ComValue objects for each parameter
>>>loInt = loBridge.CreateComValue()
>>>loInt.Value = INT(10)
>>>loString = loBridge.CreateComValue()
>>>loString.Value = "Hello World."
>>>loDecimal = loBridge.CreateComValue()
>>>loDecimal.Value = CAST( 5.22 as Currency)
>>>
>>>lobridge.InvokeStaticMethod("Westwind.WebConnection.TypePassingTests",;
>>>                            "PassByReferenceStatic",;
>>>                            loInt,loString,loDecimal)
>>>
>>>*** Look at the result values
>>>? loInt.Value, loString.Value, loDecimal.Value
>>>
>>>
>>>
>>>+++ Rick ---
>>>
>>>
>>>>UPDATE. I checked your code and you're passing parameters as is, not by reference. I am wondering if I change it to pass by reference, my problem will be resolved.
>>>>
>>>>UPDATE 2. Just changing them in the wwDotNetBridge program to be passed by reference didn't help.
>>>>
>>>>Hi Rick,
>>>>
>>>>I have another question. The signature for the method is this
>>>>
>>>>
>>>>static public string VerifyAddress( ref string AddressLine1, ref string AddressLine2, ref string City, ref string State, ref string ZipCode, ref string Country)
>>>>
>>>>So, although it may be not a good practice, my colleague (who wrote this method) returns new values using parameters passed by references. When I debug that DLL, I can see the new values, however, my call
>>>>
>>>>
>>>>lcResult = loBridge.Invokestaticmethod("Siriusware.Library.Cass", "VerifyAddress", @Address1, @Address2, @City, @State, @Zipcode, @Country)
>>>>		?Address1
>>>>		?ZipCode
>>>>		
>>>>		?lcResult
>>>>
>>>>
>>>>does not return the new values for the address components.
>>>>
>>>>Do you know what needs to be done to be able to get the changed values in VFP or how the method should be changed in C# if this is not possible?
>>>>
>>>>Thanks in advance.
>>>>
>>>>
>>>>>>UPDATE. I got it to work using InvokeStaticMethod, e.g. I'm getting the result. The only problem is that this dll reads one setting from the ini file and it's not finding that ini file and therefore the result is not what I want to get.
>>>>>
>>>>>Do you mean the YourExe.config file? If so that file needs to be with the executing EXE. So if you're running in Fox IDE it'll be vfp.exe.config. If you're running your actual exe it'll be YourExe.exe.config.
>>>>>
>>>>>+++ Rick ---
>>>>>
>>>>>>
>>>>>>Hi everybody,
>>>>>>
>>>>>>I am trying to use wwDotNetBridge to access static class from our custom dll. I am trying this code:
>>>>>>
>>>>>>
>>>>>>do wwDotNetBridge
>>>>>>local loBridge as wwDotNetBridge
>>>>>>loBridge = createobject("wwDotNetBridge", 'V4')
>>>>>>if vartype(loBridge) = 'O'
>>>>>>	if loBridge.LoadAssembly("Siriusware.Library.dll")
>>>>>>
>>>>>>		Address1 = "2170 S Josephine St Unit 1"
>>>>>>		Address2 = ""
>>>>>>		City = "Denver"
>>>>>>		State = "CO"
>>>>>>		Zipcode  = "80210"
>>>>>>		Country = "USA"
>>>>>>
>>>>>>		*            string sResult = Cass.VerifyAddress( ref Address1, ref Address2, ref City, ref State, ref Zipcode, ref Country);
>>>>>>
>>>>>>		loCass = loBridge.CreateInstance("Cass")
>>>>>>		if isnull(loCass)
>>>>>>			? loBridge.cErrorMsg
>>>>>>			return
>>>>>>		endif
>>>>>>
>>>>>>		*loPop.Connect("mail.gorge.net",587,.f.)
>>>>>>
>>>>>>
>>>>>>		* loPop.Connect("mail.gorge.net",587,.f.)
>>>>>>		*? loBridge.InvokeMethod(loPop,"Connect","pop3.gorge.net",110,.f.)
>>>>>>
>>>>>>		? loCass.VerifyAddress(@Address1, @Address2, @City, @State, @Zipcode, @Country)
>>>>>>	endif
>>>>>>endif
>>>>>>
>>>>>>
>>>>>>but I am getting this strange error
>>>>>>
>>>>>>Type not loaded. Please load call LoadAssembly first.
>>>>>>
>>>>>>What do I need to do in order to use the class and why do I get this weird error message if I did use LoadAssembly already?
If it's not broken, fix it until it is.


My Blog
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform