Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
1
| Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long |
It’s nice to be important but it’s more important to be nice
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Als je iet in VB wilt proggen, kun je bijvoorbeeld ATL dll's in C++ maken die hetzelfde doen.
ActiveX controls zijn ook een manier om dit te doen, maar die hebben vaak een UI element.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Klopt, maar VB zal het control bij het compileren altijd registreren en dat is nou net niet wat de TS wil.farlane schreef op 03 november 2003 @ 20:46:
Je kunt met VB ActiveX dll's maken die nadat ze geregistreerd zijn in je references dialoog opduiken. ( Samen met nog 65535 andere dll's )
Google groups is je vriend. Volgens mij is die 1e link wel interessant.
http://groups.google.com/...ed+dll&btnG=Google+zoeken
[ Voor 4% gewijzigd door pjonk op 03-11-2003 20:53 . Reden: typo ]
It’s nice to be important but it’s more important to be nice
Deze reply gaat minder vriendelijk klinken dan'ie bedoeld is, ik waardeer jullie hulp wel maar eigenlijk vertellen jullie niets nieuws.
Ik wil hem, als het even kan, niet registreren, want dat gekut met references heb ik helemaal gehad. Dat komt omdat die installer die bij vb zit niet altijd even goed functioneerd. En verder activeX controls... mja, dat is misschien een idee. Maar die moeten ook geregistreerd worden, of niet?
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Wil je met een COM/OLE/ActiveX DLL communiceren of met een standaard Windows DLL?
In VB6 kun je naar mijn weten alleen ActiveX DLL's maken.
In de Google groups ben ik best wel wat relevante threads tegengekomen. Onder andere ook deze post:
Dit is allemaal wat geavanceerder programmeerwerk, maar je zou je eens in de bovengenoemde API functies moeten gaan verdiepen.Loading unregistered Dll and Ocx COM servers is dealt with in detail in
Chapter 7 in my book. You need to call LoadLibrary/GetProcAddress on
DllGetClassObject to get a class factory, then call CreateInstance on the
class factory to get at a COM object.
Overigens heb ik zelf geen ervaring met het aanroepen van ongeregistreerde COM DLL's vanuit VB 6.
It’s nice to be important but it’s more important to be nice
Nog niet gezien, sorry... Zo ff die link bekijkenJonkieXL schreef op 03 november 2003 @ 21:03:
Waarschijnlijk had je mijn post hierboven nog niet gezien, maar je hebt nog steeds geen antwoord gegeven op mijn vraag:
Wil je met een COM/OLE/ActiveX DLL communiceren of met een standaard Windows DLL?
Nouja, om heel eerlijk te zijn weet ik niet precies wat de verschillen tussen die 4 zijn, maar ik weet dat ik het liefste een DLL zou gebruiken op de manier waarop je ook de win32 api's gebruikt, dus dat je met 'declare function X lib "my.dll"' de functions toegankelijk maakt voor je programma, maar ik heb al zoveel gelezen dat ik begrijp dat dat niet mogelijk is met alleen VB6.
Dus ik ben verder gaan zoeken en ontdekte dat je met het OLE-control dat standaard door VB toegankelijk gemaakt wordt, ook kan communiceren met externe libraries (dus ook DLL's, neem ik aan?). Vandaar dat mij vraag over OLE ging, maar misschien heb ik het wel helemaal bij het verkeerde eind.
In elk geval nu eerst even je google-link bekijken, dank je.
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
It’s nice to be important but it’s more important to be nice
Wacht ik ondertussen op meer antwoord en ga ik verder met het internet afschuimen.
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Dat zijn drie woorden voor een en dezelfde enkele architectuur?JonkieXL schreef op 03 november 2003 @ 21:18:
Sorry nog voor de verwarring, maar COM/OLE/ActiveX DLL zijn synoniemen voor een door Microsoft verzonnen standaard voor een DLL architectuur.
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Wat ik meestal doe is met een .bat-je de dll's reggen (met regsvr32), maar in mijn code gebruik ik late-binding. Dat wil zeggen dat je iets dimt "as object" en daar vervolgens met CreateObject het juiste component in gooit.
Ik denk dat ik wel begrijp waarom je die reference niet wil zetten: version-hell (sub-part van dll-hell
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Juist, dat is precies de redenRobIII schreef op 03 november 2003 @ 21:35:
Je hoeft ook geen reference te zetten, maar je moet zet wel reggen.
Wat ik meestal doe is met een .bat-je de dll's reggen (met regsvr32), maar in mijn code gebruik ik late-binding. Dat wil zeggen dat je iets dimt "as object" en daar vervolgens met CreateObject het juiste component in gooit.
Ik denk dat ik wel begrijp waarom je die reference niet wil zetten: version-hell (sub-part van dll-hell). Op deze manier kun je je dll's los "upgraden" zonder er last van te hebben in je app.
Kun je me een voorbeeld geven van late-binding? Heb dr op internet ook al over gelezen maar wat het nou precies is, is me nog niet helemaal duidelijk.
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
1
2
3
4
| Dim x as Object Set x = CreateOject("Word.Application") x.visible =true |
Early binding hiervoor is een reference noodzakelijk!
1
2
| Dim x as New Word.Application x.visible =true |
Ik had eigenlijk niet het idee dat het puur om de problematiek met references te doen had.
It’s nice to be important but it’s more important to be nice
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
In CreateObject maak je vervolgens het object aan via de naam die je aan de MultiUse Class gegeven hebt.
Uiteraard moet je class naam uniek zijn en het stelen zou je alleen kunnen voorkomen door je DLL naam officieel te laten registreren, maar ga er maar vanuit dat deze registratie een hoop centjes kost
It’s nice to be important but it’s more important to be nice
Maar stel nu dat ik die class MubaDLL noem, maar ik installeer daarna een programma waar ook zo'n dll bijzit en die toevallig ook MubaDLL heet... wat gebeurt er dan? Nja, kleine kans natuurlijk, maar *stel*
Mja ik weet het, ik ben aan het zeiken ofzo, maar ik wil zulk soort problemen gewoon voorkomen.
[ Voor 16% gewijzigd door muba op 03-11-2003 22:21 ]
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Dan krijg je dus MyCompany.MyClass als DLL reference. Vet kleine kans dat die al in gebruik is. Als je vervolgens zorgt dat de DLL's in de App.path/Bin directory van je project staan kan het al helemaal geen kwaad meer. Wil je je dll in de system(32) directory gooien dan moet je idd een beetje uitkijken met de naam. Maar als 'ie op google niet voorkomt zit je safe denk ik zo
En wat JonkieXL zegt
[ Voor 28% gewijzigd door RobIII op 03-11-2003 22:32 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Ok nu word ik toch weer een beetje in de war gebracht. Ik ben nog niet zover dat ik zelf iets heb uit kunnen proberen, misschien zou ik dat eerst eens moeten doen. Maar... MyCompany, dat is de naam van je .DLL bestand? En MyClass is dus de naam van die MultiUse class?RobIII schreef op 03 november 2003 @ 22:31:
Meestal maak ik een project (naam van Bedrijf hier) met daarin de benodigde classes (Persons, Users, Whatever).
Dan krijg je dus MyCompany.MyClass als DLL reference. Vet kleine kans dat die al in gebruik is. Als je vervolgens zorgt dat de DLL's in de App.path/Bin directory van je project staan kan het al helemaal geen kwaad meer. Wil je je dll in de system(32) directory gooien dan moet je idd een beetje uitkijken met de naam. Maar als 'ie op google niet voorkomt zit je safe denk ik zo
En wat JonkieXL zegtBeats me! Ik heb nog nooit gehoord dat je een "Class naam" moet laten registreren. Laat staan officieel registreren. Iemand enig idee waar dat kan?
/Onzin dus
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Dank jewel allemaal, ik denk dat ik hier aardig mee verder kan expirimenteren!
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Je mag die DLL rustig bladiebla.dll noemen, dat maakt voor de reference geen p**p uitMUBA schreef op 03 november 2003 @ 22:47:
ja dus
Dank jewel allemaal, ik denk dat ik hier aardig mee verder kan expirimenteren!
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Overigens heb ik met een of andere hack ook al eens een normale dll kunnen produceren met VB6. ( Het kan wel, de object files die de VB compiler produceert zijn normale object files. Ik meen me zelfs te herrineren dat de VB compiler erg veel op de C/C++ compiler lijkt die bij VC++ zit )
FF zoeke ....
Dammit ik kan het niet terugvinden ...
[ Voor 5% gewijzigd door farlane op 04-11-2003 09:34 ]
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.