Toon posts:

[VB6] DLL maken voor communicatie Word? Newbie!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo iedereen!

Ik heb een klein beetje ervaring met Visual Basic, heb hier en daar een programmaatje geschreven... maar nu wordt mij gevraagd om een DLL te maken, zodat er vanuit een ander programma (geprogrammeerd in Progress) gecommuniceerd kan worden met Microsoft Word (om vanuit een database met klanten etc etc een brief op te stellen)
Wie kan mij helpen, want ik heb geen idee hoe dit aan te pakken. Alles is welkom!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Hmm kijk eens in MSDN? :)
't Is vrij makkelijk hoor, zorg eerst dat alle code in een class staat. Dan start je een nieuw project (ActiveX dll), daar stop je die class in, zorg ervoor dat 'ie public is (properties window), en compilen maar. Oh en de project properties goedzetten natuurlijk, project1 is zo'n stomme naam :)

Exact expert nodig?


Verwijderd

Topicstarter
Ik ben al druk bezig geweest, en ben dat nog steeds op MSDN. Maar gewoon even de basics kort uitgelegd. Hoe roept een ander programma mijn DLL aan, en hoe reageert mijn DLL erop. En wat voor een soort DLL moet ik maken? ActiveX DLL, ActiveX Document DLL?

Verwijderd

Kan dat progress overweg met COM (ActiveX) ?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

't Is dus een ActiveX dll.
In VB moet je er een reference naartoe zetten, of als je 'm via CreateObject aanmaakt is het iets als
Set blah = CreateObject("ProjectTitel.Classnaam")
En verder is het zoals ik al zei. New project -> ActiveX dll.
Class toevoegen, en de standaart Class1 verwijderen. Properties goed zetten (class moet public zijn, project properties een beetje fatsoenlijk vullen zodat je niet eeuwig met Project1 blijft zitten :P) en compilen maar.

Hoe dat vanuit Progress moet weet ik niet. Als 'ie met ActiveX overweg kan moet dat wel lukken.

Exact expert nodig?


Verwijderd

Topicstarter
Op donderdag 27 december 2001 11:47 schreef Yarvieh het volgende:
Kan dat progress overweg met COM (ActiveX) ?
Mij is verteld dat het met DLL's overweg kan... Verder weet ik nix!

Verwijderd

euh ja maar een COM Dll is toch wel 'n compleet ander iets als een normale dll die wat functies exporteerd, als prolog allen met het laatste soort dll's overweg kan, dan kan je vb wel in de hoek smijten en met C aan de gang gaan. Als prolog zelf echter met com overweg kan, waarom gebruiken ze dan niet gewoon de word com objecten :?

Verwijderd

Topicstarter
Oke, ik ben al weer een endje verder. Maar nu rest de vraag nog: hoe weet mijn DLL nou, wat het programma dat 'm aanroept precies wil? Want er zijn verschillende dingen die moeten gebeuren:
1) Als het 'hoofdprogramma' daar om vraagt, dan moet het template word-document ingelezen worden en dan moeten alle samenvoegvelden eruit gehaald worden. Die informatie moet weer teruggestuurd worden.
2) Dan worden alle samenvoegvelden door het 'hoofdprogramma' ingevuld, en weer teruggestuurd naar de DLL, die weer die template pakt, daarvan een nieuw document maakt, maar dan compleet ingevuld, zodat de brief direct verzonden zou kunnen worden.

Snap je wat ik bedoel? Ik hoop niet dat ik te lastig ben, maar wat DLL's betreft ben ik een newbie, en wat Visual Basic een gevorderde newbie!

Verwijderd

Ga eerst es na of prolog en Vb technish te koppelen zijn en ga je daarna pas druk maken over functionaliteit.

Verwijderd

Topicstarter
Op donderdag 27 december 2001 12:12 schreef Yarvieh het volgende:
Ga eerst es na of prolog en Vb technish te koppelen zijn en ga je daarna pas druk maken over functionaliteit.
Prolog?

Verwijderd

progress, close enough toch? ik had de 1e letter goed :z

Verwijderd

Topicstarter
Ik heb het nog eens bekeken, en progress ondersteunt dat. Er zijn al meerdere DLL's met VisualStudio 6/VB 6 gemaakt. Maar ik vorder... het gaat steeds beter!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op donderdag 27 december 2001 12:10 schreef CyberKnutselaar het volgende:
Snap je wat ik bedoel? Ik hoop niet dat ik te lastig ben, maar wat DLL's betreft ben ik een newbie, en wat Visual Basic een gevorderde newbie!
Je hebt nu een VB progje wat werkt? Er even vanuit gaande dat Progress met ActiveX dll's kan ouwehoeren, maak er dan eerst binnen je huidige project een class van (add classmodule...).
En zorg dat alles werkt zoals je wilt. Welliswaar roep je het dan aan vanuit in huidige programma maar dat maakt weinig uit. Als jij een mooie CDoeIetsMetWord class hebt, die volledig op zichzelf staat (die je dus vanuit je form kan gebruiken als
code:
1
2
3
4
Dim c As New CDoeIetsMetWord
c.DoeIets
c.DoeNogIets
Set c = Nothing

kun je 'm als het goed werkt in een activex dll proppen.

Tjah en hoe je de info uit je Word docje naar de app stuurt, en later weer terug, dat weet ik niet. Ik weet niet precies wat je wilt doen met Word (en ik ben ook geen Word expert trouwens), maar met wat events en properties/methods moet dat prima te doen zijn.

Ook geen slecht idee trouwens om eerst ff een dummy dll te maken, gewoon, om er een beetje vertrouwd mee te raken...

Maar uhmm als Progress activex ondersteunt, kun je toch ook rechtstreeks vanuit Progress Word benaderen :?

Exact expert nodig?


Verwijderd

Topicstarter
Tsja, dat kan... maar dat gaat zo ongelofelijk mis met progress. Hij kan het wel een paar keer achter elkaar (een stuk of 50 brieven in 1x pakt word wel) maar als je er meer gaat doen, dan loopt het hele zaakje in de soep. En nu kreeg ik van m'n werkgever de opdracht om dit maar eens te proberen, en daar ben ik nu mee bezig.

Ik snap je uitleg! Maar nu nog even een andere vraag: hoe start ik Word met activex? Want ik wil dus kunnen zeggen
code:
1
2
word.visible = true
Word.adddocument

en dat soort grappen... maar ut wil maar niet lukken!

Verwijderd

code:
1
2
3
dim word as object
set word = CreateObject("word.application")
word.visible =true

zoiets? heb geen word installed staan om te testen maar werkt vast wel

Verwijderd

Topicstarter
zoiets? heb geen word installed staan om te testen maar werkt vast wel
en ja hoor! Het werkt! Tnx!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 15-09 19:11

Crazy D

I think we should take a look.

Op donderdag 27 december 2001 13:43 schreef CyberKnutselaar het volgende:
Ik snap je uitleg! Maar nu nog even een andere vraag: hoe start ik Word met activex? Want ik wil dus kunnen zeggen
code:
1
2
word.visible = true
Word.adddocument

en dat soort grappen... maar ut wil maar niet lukken!
Geen idee. Mijn Word ervaring gaat niet verder dan het aanpassen van een macro binnen Word. Geen flauw idee hoe je vanuit VB code dat kan doen.

Zit er in MSDN niet een handig stukje over het word com object? Zoek ff in MSDN naar "Microsoft Office 2000/Visual Basic Programmer's Guide" dat klinkt als waar je misschien wat aan hebt :)

Exact expert nodig?


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 15:41

mulder

ik spuug op het trottoir

-Maak een reference naar de Word Type Library
code:
1
2
3
4
5
6
7
8
9
Dim wordObj As Word.Application

  On Error Resume Next
  Set wordObj = GetObject("Word.Application")
  if Err<>0 then
    Set wordObj = CreateObject("Word.Application")
  end if
  wordObj.Visible = True
  etc....

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
El_Mundo... die getobject werkt niet, maargoed, is ook niet nodig.

Andere vraag: hoe krijg ik word nou weer gesloten? als ik doe
code:
1
2
dim msword as object
set msword = createobject("word.application")

dan werkt bijvoorbeeld
code:
1
msword.exit

niet!

Moet ik die object destroyen ofzo? En zo ja, hoe. Of moet dat anders?

  • ParaNoiMia
  • Registratie: Mei 2000
  • Laatst online: 13-09 20:19
msword.close
set msword=nothing

Verwijderd

Topicstarter
Geen van beide werkt...
De .close geeft een fout 'object ondersteunt niet....'
de = nothing heeft geen enkel effect, het wordvenster blijft gewoon waar het is.

  • ParaNoiMia
  • Registratie: Mei 2000
  • Laatst online: 13-09 20:19
Ok,

Even in een project gekeken en daar heb ik:

objWord.quit False
Set objWord = Nothing

De False geeft aan dat ie alle meldingen moet onderdrukken bij het sluiten (zoals do you want to save etc)

Verwijderd

Topicstarter
Perfect man! Werkt goed!

Verwijderd

Topicstarter
Die DLL is ondertussen klaar. En ik kon 'm testen toen ie nog niet gecompiled was door gewoon een form toe te voegen in het project, en dan
code:
1
dim dll as new dll

Maar nu is ie gecompiled (bestandje.dll is het nu dus), maar hoe roep ik dat nu aan vanuit een ander VB programma? Dus gewoon een 'normale' exe file?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 15:41

mulder

ik spuug op het trottoir

Het is nu dus een ActiveX DLL, je moet nu een referentie maken in je project naar die DLL. In je VB menu Project>References.

oogjes open, snaveltjes dicht


Verwijderd

Op donderdag 03 januari 2002 16:38 schreef El_Mundo het volgende:
Het is nu dus een ActiveX DLL, je moet nu een referentie maken in je project naar die DLL. In je VB menu Project>References.
Wat ik een beetje uit het hele verhaal begrijp is dat Word hier de 'boosdoener' is als vanuit Progress 50x een brief wordt gegenereerd, klopt toch?

Maar ik kan je verzekeren dat dat ook vanuit VB gaat gebeuren. Kortweg loopt het geheugen gewoon vol. Het enigste wat je met een extra VB ActiveX DLL genereerd is een hoop overhead (denk hierbij aan installatie/registratie etc) tenzij deze DLL heel veel 'rekenwerk' voor je gaat overnemen.

Is dit niet zo dan zou ik eerder zeggen: probeer die code vanuit Progress goed te krijgen (na het genereren van 10 brieven bijvoorbeeld saven en sluiten van deze documenten en verder gaan).

Ik ken Progress niet maar ik ken wel VB en COM/OLE-automation. Als Progress een beetje OLE automation aankan dan bespaar je jezelf veel (onderhouds-)problemen door het rechtstreeks vanuit Progress te doen.

Suc6
Pagina: 1