Beste tweakers,
Ik heb hier in C# (code normaal in VB6/VB.NET, ben niet gevorderd in C#) een soort dll geschreven (ook een eerste keer voor mij) met functies om pakketjes via een soort winsock systeem op te vangen en te verwerken.
Die DLL heb ik gecompileerd en roep ik aan in een ander C# project in een form. Daar werkt het goed. Doe ik bijvoorbeeld als volgt:
Bijvoorbeeld in de dll:
En dan aanroepen in een willekeurig C# programma:
Nu heb ik de DLL eigenlijk gemaakt om te gebruiken in een SCADA/HMI programma, genaamd Citect. Scripting in dat programma gebeurt met een taaltje dat ze Cicode gedoopt hebben. En in dit taaltje heb ik de mogelijkheid om DLLs te laden en te gebruiken.
Volgens de beschrijving gaat dit als volgt (zo even uit de help files geript):
DLLOpen
DLLCall
Dus heb ik per test even weer dit in elkaar geflansed (na mijn DLL naar een map in PATH verbannen te hebben):
Hoewel ik niets doe met die laatste return daar; moet dat niets uitmaken. Dat laatste argument van de message functie is het type messagebox dat je krijgt (0 = notify oid) en de rest spreekt wel voor zich denk ik.
Als ik die code aanroep (uiteraart eerst InitMyDLLs() gevolgd door Aap()) krijg ik op de juiste volgorde mijn messageboxes op mijn scherm. Helaas is die laatste leeg (inhoud van de msgbox)! er komt dus geen aap uit mijn functie, hoe ik speel met dat hFunction argument van DLLCall, het lukt me niet.
Nou beste modjes, mijn best gedaan dit keer een duidelijkere vraagstelling te maken dan mijn gebruikelijke raadsels; Moet ik mijn dll op een andere manier aanroepen? Of zelfs op een andere manier opbouwen?
Ik heb hier in C# (code normaal in VB6/VB.NET, ben niet gevorderd in C#) een soort dll geschreven (ook een eerste keer voor mij) met functies om pakketjes via een soort winsock systeem op te vangen en te verwerken.
Die DLL heb ik gecompileerd en roep ik aan in een ander C# project in een form. Daar werkt het goed. Doe ik bijvoorbeeld als volgt:
Bijvoorbeeld in de dll:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
| namespace modTest { public class commTest { public commTest() { } public string Test123() { return "aap"; } } } |
En dan aanroepen in een willekeurig C# programma:
C#:
1
2
3
4
5
6
7
| using modTest; [...] modTest.commTest m = new commTest(); string strTest = m.Test123(); MessageBox.Show(strTest); [...] |
Nu heb ik de DLL eigenlijk gemaakt om te gebruiken in een SCADA/HMI programma, genaamd Citect. Scripting in dat programma gebeurt met een taaltje dat ze Cicode gedoopt hebben. En in dit taaltje heb ik de mogelijkheid om DLLs te laden en te gebruiken.
Volgens de beschrijving gaat dit als volgt (zo even uit de help files geript):
DLLOpen
DLLCall
Dus heb ik per test even weer dit in elkaar geflansed (na mijn DLL naar een map in PATH verbannen te hebben):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| INT hTest;
FUNCTION InitMyDLLs()
Message ("Venster titel", "Start laden dll", 0);
hTest = DLLOpen("modTest.dll", "Test123", "C");
END
STRING
FUNCTION
Aap()
Message ("Venster titel", "Start aanroepen dll", 0);
STRING sResult;
sResult = DLLCall(hTest, "");
Message ("Venster titel", sResult, 0);
RETURN sResult;
END |
Hoewel ik niets doe met die laatste return daar; moet dat niets uitmaken. Dat laatste argument van de message functie is het type messagebox dat je krijgt (0 = notify oid) en de rest spreekt wel voor zich denk ik.
Als ik die code aanroep (uiteraart eerst InitMyDLLs() gevolgd door Aap()) krijg ik op de juiste volgorde mijn messageboxes op mijn scherm. Helaas is die laatste leeg (inhoud van de msgbox)! er komt dus geen aap uit mijn functie, hoe ik speel met dat hFunction argument van DLLCall, het lukt me niet.
Nou beste modjes, mijn best gedaan dit keer een duidelijkere vraagstelling te maken dan mijn gebruikelijke raadsels; Moet ik mijn dll op een andere manier aanroepen? Of zelfs op een andere manier opbouwen?