[VB]App. koppelen met andere app. middels DLL

Pagina: 1
Acties:

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Het volgende doet zich voor:

Een klant van ons heeft een administratiepakket(CRM) voor zijn bedrijf. Hij wil dit koppelen aan een toegangscontrolesysteem. (TGC). Zijn programmeurs hebben geen verstand van het aansturen van relais, schakelen van poorten etc. Wij wel.
Nu moeten die beide pakkettten gekoppeld worden. Ik krijg van CRM een signaal "geef kaart uit" en zij krijgen van mji (TGC) het kaartnummer dat ik heb uitgegeven. Zij kwamen met het idee om dit middels een DLL te doen. Op zich leuk bedacht, alleen hoe kan ik dit het beste doen ? Hoe koppel je twee applicaties met een DLL ?

Ik ga morgen eens e.e.a. proberen, maar wil graag vooraf wat informatie van jullie hebben, wat is jullie ervaring hiermee en wat zijn de mogelijkheden ? Hoe zouden jullie dit aanpakken, waar moet ik op letten en wat kan wel en wat niet ?

Ik zoek geen links naar MSDN oid, dus graag alleen zinvolle reacties (ook niet klakkeloos een slotje...)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Een dll is een library welke door diverse applicaties gedeeld kan worden en heeft niks met communicatie tussen 2 applicaties te maken.

Als je je aan de policy houdt dan krijg je geen slotje, maar zeggen dat je geen slotje wilt heeft hier geen invloed op.

[ Voor 6% gewijzigd door justmental op 31-07-2003 20:38 ]

Who is John Galt?


  • Juicy
  • Registratie: December 2000
  • Laatst online: 08:14
Denk dat je beter even kunt zoeken op het internet. Als je nu ook eens zou vermelden welke versie van VB het zou moeten zijn ... VB < 6, VB6 of VB.NET ?

Keywords voor VB6 en eerder COM
Keywords voor VB.NET is remoting

-


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
pkouwer schreef op 31 July 2003 @ 20:32:
Ik zoek geen links naar MSDN oid, dus graag alleen zinvolle reacties
Oh, en nuttige links naar MSDN zijn niet zinvol?

https://fgheysels.github.io/


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
justmental schreef op 31 July 2003 @ 20:37:

Als je je aan de policy houdt dan krijg je geen slotje, maar zeggen dat je geen slotje wilt heeft hier geen invloed op.
wie de schoen past zal hem zeker aantrekken...

Dat terzijde: VB^is de taalen ja, zal zeker nog even googelen. Wat is jullie ervaring/toepassing ?

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
whoami schreef op 31 July 2003 @ 20:42:
[...]


Oh, en nuttige links naar MSDN zijn niet zinvol?
zeg ik dat dan ?

  • Juicy
  • Registratie: December 2000
  • Laatst online: 08:14
pkouwer schreef op 31 juli 2003 @ 20:32:
Ik zoek geen links naar MSDN oid, dus graag alleen zinvolle reacties (ook niet klakkeloos een slotje...)
Lijkt me duidelijk dat je dat zegt ...

En je hebt nog steeds niet gezegd voor welke versie van VB ...

-


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Taal is VB6, excuus.

Het punt is dat ik op GoT steeds vaker reactie zie in de zin van F1, Google, MSDN, UTFS en ga zo maar door. Ik snap ook wel dat bijna alles op het gebied van programmeren op Internet te vinden is of in de help-file. Waar het mij om gaat zijn tips van praktische aard, wat kan ik in de praktijk tegenkomen, wat werkt makkelijk/of helemaal niet. Zulke dingen zoek ik.

Tuurlijk maar ik ook gebruik van google en de rest, maar daar gaat het even niet om. Vandaar mijn stelling geen onzin-reacties. OK, misschien verkeerd verwoord, MSDN=nuttig., dussssss

tips, pleazzzz

  • Juicy
  • Registratie: December 2000
  • Laatst online: 08:14
Zie mijn eerste reactie. Gewoon daarop zoeken, zijn honderden voorbeelden te vinden. We hoeven het wiel hier toch niet opnieuw uit te vinden ?

Denk dat je hiermee wel op weg komt:

http://www.google.nl/sear...+com+objects+examples&lr=

-


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Juicy schreef op 31 July 2003 @ 20:52:
[...]

We hoeven het wiel hier toch niet opnieuw uit te vinden ?
...ervaring...

Verwijderd

Ik neem aan dat hun (CRM) en jullie (TGC) beiden applicaties zijn die in-house ontworpen zijn en jullie beiden programmeurs aan de applicaties hebben werken.

Dan zou je het volgende kunnen doen:

Stop alle functionaliteit voor de koppeling in een DLL.
Beide applicaties moeten met dezelfde DLL kunnen werken, dus moeten ze beiden verwijzen naar dezelfde instance.
Zorg dat 1 van de 2 appl. initieel een instance van een object in de DLL aanmaakt of maak een 3de applicatie die op de achtergrond actief blijft en de DLL in memory kan houden.

Nu moeten beide applicaties met de DLL die in memory staat een verbinding hebben door een object/class aan te maken. Bijv:
code:
1
myCommunicationObject = GetObject("myDLL.CommunicationObject")

Wanneer beide applicaties dit doen hebben ze hetzelfde object te pakken in memory en kunnen ze communiceren.

Dit communiceren kan als volgt:
- Functies
De ene applicatie roept dit aan als er iets moet gebeuren in de andere applicatie en kan eventueel een resultaat terug krijgen
- Events
De ene applicatie krijgt een bericht van een andere applicatie dat er iets gebeurt is terwijl hij er niet specifiek om gevraagd heeft bij de andere applicatie.

Zo wordt de DLL een soort doorgeef-luik van de ene appl. naar de andere.
Deze DLL kan ook een op zich staande ActiveX-EXE zijn.

Vergelijk het maar met Automation van bijv. MS Word

Je kunt via een objectenstructuur vanuit Visual Basic Word aanroepen en wijzigingen in het actieve document maken.... Dit kunnen ook 2 applicaties tegelijk doen. Je roept functies aan, zet properties en krijgt events terug.
Als de ene appl. een tekst in het actieve document in Word zet, krijgt de andere appl. een berich van "He... er is tekst in het document gezet".

CRM en TGC moeten dus beiden dezelfde instance van een object hebben om te communiceren.

Dus NIET:
CRM: myInstance = New CommunicationObject
en
TGC: myInstance = New CommunicationObject
want dan hebben ze beiden een eigen instance en kunnen niet communiceren.

Hoop dat dit je opweg kan helpen.... ik heb het namelijk al meerdere keren met succes op deze manier gedaan.... (ik hoop trouwens dat je het kan volgen)

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
kijk, dit noem ik nou een goede tip, ik had het nl. op de NIET-manier (??) gedaan, maar blijkbaar moet het met getObject. Is in jou voorbeeld "myDLL.CommunicationObject" de betreffende functie, of hoe moet ik dit precies zien ?

Verwijderd

CommunicationObject is een class in de DLL "myDLL"

Deze class is public en heeft dus public properties, functies en events zodat deze van buitenaf door de CRM en TGC te benaderen zijn.

Als voorbeeld hoe je CRM/TGC er in code uit gaat zien wanneer de een functie "Test" in dit object gaat aanroepen:

code:
1
2
3
4
5
6
Declaratie:
Private WithEvents myCommObj as myDLL.CommunicationObject

Code:
Set myCommObj = GetObject("myDLL.CommunicationObject")
iResult = myCommObj.Test(myParameter)
Dat WithEvents zorgt er trouwens voor dat je de events vanuit de DLL in CRM kunt gebruiken.

Natuurlijk wel je nieuw gemaakte DLL bij de references in CRM en TGC zetten wil je early-binding gebruiken. Dit is een stuk handiger tijdens het programmeren ook.
Om GetObject te kunnen gebruiken moet er dus al een instance aanwezig zijn van de DLL.

Wil je dit vanuit de CRM en TGC regelen kun je dit doen:
code:
1
2
3
4
5
6
7
On Error Resume Next
Set myCommObj = GetObject("myDLL.CommunicationObject")
If (myCommObj is Nothing) or (Err <> 0) Then
    Set myCommObj = New myDLL.CommunicationObject
    Set myCommObj = GetObject("myDLL.CommunicationObject")
End If
On Error Goto 0

Dit voorgaande stukje code maakt dus een eerste instance aan wanneer deze nog niet aanwezig is en gebruikt de bestaande op het moment dat ie er al is.

Nog even een voorbeeld in jouw situatie:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CRM:
iKaartNummer = myCommObject.GeefKaartUit

DLL:
Public Event OnGeefKaartUit(iReturnNbr)
Public Function GeefKaartUit() as integer
  Dim iNbr
  RaiseEvent OnGeefKaartUit(iNbr)
  GeefKaartUit = iNbr
End Function

TGC:
Private WithEvents myCommObject as myDLL.CommunicationObject
Sub myCommObject_OnGeefKaartUit(iNbr as integer)
  iNbr = <je nieuwe kaartnummer>
End Sub


Uitleg:
- CRM roept functie in DLL aan om een kaartnummer te krijgen
- Functie DLL geeft een event dat er een kaartnummer verkregen moet worden
- TGC heeft dat event geimplementeerd via WithEvents en maakt een nieuw kaartnummer en geeft het terug in de event-parameter
- Functie in DLL leest param uit event en geeft dit terug aan CRM via functie-resultaat
- CRM heeft een nieuw kaartnummer

Volg je me nog? :9

Mochten er tikfouten in de code zitten, hang me er niet aan op, want ik tik dit even snel uit me hoofd.

[ Voor 35% gewijzigd door Verwijderd op 31-07-2003 22:03 ]


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Gracio(s) Gracia !! Tanfastisch, dit zoek ik, hiermee kan ik wel uit de voeten, alleen even verder speuren naar de precieze werking/achterliggende gedachte en dan kan ik geld verdienen voor de baas !

Verwijderd

Had nog even een edit in me laatste post met die achterliggende gedachten.
En een uitwerking in jouw situatie... makkelijker kan het niet.... toch????

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
pkouwer schreef op 31 July 2003 @ 22:07:
Gracio(s) Gracia !! Tanfastisch, dit zoek ik, hiermee kan ik wel uit de voeten, alleen even verder speuren naar de precieze werking/achterliggende gedachte en dan kan ik geld verdienen voor de baas !
Vergeet niet om Gracioso ook even een mooi bedrag over te maken he :)

Ik heb deze nuttige DLL thread gelijk ff opgeslagen bij m'n vb scrap-scripts...zodat ik het ooit ook nog eens kan gebruiken...u wordt weer eens hartelijk bedankt!

Verwijderd

Vergeet niet om Gracioso ook even een mooi bedrag over te maken he :)
haha.... of kan ik er soms komen werken??? deze vb-er zit momenteel ff zonder

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
Verwijderd schreef op 31 July 2003 @ 22:14:
[...]

haha.... of kan ik er soms komen werken??? deze vb-er zit momenteel ff zonder
Same here...ben nu maar voor bedrijf van een huisgenoot aan het coden geslagen, beetje gezeik met de rasapi32.dll.....maar da's een heel ander verhaal (maar wel interessant die win32 api).

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
MissingDog schreef op 31 juli 2003 @ 22:11:
[...]


Vergeet niet om Gracioso ook even een mooi bedrag over te maken he :)

Ik heb deze nuttige DLL thread gelijk ff opgeslagen bij m'n vb scrap-scripts...zodat ik het ooit ook nog eens kan gebruiken...u wordt weer eens hartelijk bedankt!
wat zal het zijn ?

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
MissingDog schreef op 31 July 2003 @ 22:17:
[...]


Same here...ben nu maar voor bedrijf van een huisgenoot aan het coden geslagen, beetje gezeik met de rasapi32.dll.....maar da's een heel ander verhaal (maar wel interessant die win32 api).
vertel...

Verwijderd

wat zal het zijn ?
Heb voorlopig al genoegen genomen met je bedankje :)
Als ik geld had willen hebben had ik je hier niet geholpen he....
Maar gelukkig kunnen we elkaar hier mooi helpen

Maar zit dat bedrijfje toevallig in de kop van Noord-Holland en heeft het een openstaande vacature???

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
zit in de buurt. Vlissingen :) Als je het niet erg vind om dagelijks uren in de file te staan is het een optie :)

Verwijderd

Dat is wel een beetje ver weg jah met al die files..... thuiswerk???

[ Voor 15% gewijzigd door Verwijderd op 31-07-2003 22:29 ]


  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
offtopic:
Ow ben bezig met progje voor het opzetten van VPN-verbindingen + uitvoeren aangepast inlogscript...op basis van de gegevens van het NT domein aan de andere kant van de lijn.

Wil de RASAPI32 gebruiken voor achterhalen inlognamen, password & domein van de verbinding...deze gebruiken om te verbinden....de uname&pass op kunnen slaan via mijn progje en vervolgens komt het deel wat de netwerkmappings regelt.
en natuurlijk de disconnectmodule die alles uitgooit.

probleem is meer iets voor een ander topic...al is het wel redelijk van toepassing :)
inlognaam, gebruikersnaam & domein kunnen niet goed uitgelezen&opgeslagen worden....niet met Win2k sp4 en niet met Winxp sp1....ergens lijkt de info uit zowel de ApiGuide als de info van diverse webpages outdated, want de testsources zijn 100% overgenomen, zodat ik de functies van de DLL kan doorgronden. Er worden geen foutmeldingen gegeven door VB6 of mijn programma.....het lijkt zo te horen werken, ook met steppen door de code kan ik zo eea geen fouten opsporen.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

wie de schoen past zal hem zeker aantrekken...
Wellicht dat een iets andere instelling je aan meer hulp zou helpen. Je hebt eerder deze week al een onprettige discussie via email met een mod hier gehad, en valt nu weer linea recta 2 moderators aan. Als je een probleem hebt met iemand, praat dat dan professioneel uit via email/ICQ/MSN, en laat de steken onder water en het sarcasme zitten: dat verhoogt je kans op bruikbare antwoorden enorm.

Professionele website nodig?


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
curry684 schreef op 01 August 2003 @ 09:40:
[...]
valt nu weer linea recta 2 moderators aan. .
waar komt die tweede vandaan ?
[modbreak]
Ik heb een voorstel: Jij neemt curry684's raad ter harte, ik word niet vervelend en dan gaan we met zijn allen weer ontopic.

[ Voor 46% gewijzigd door drm op 05-08-2003 08:58 ]

Pagina: 1