Hallo
Ik heb een Delphi 7 dll gekregen met een programmatje erbij dat gebruikt maakt van die dll. Dit werkt natuurlijk geweldig.
Maar nu wil/moet ik een eigen programma in C# schrijven dat ook gebruik maakt van deze dll.
Eerst heb ik geprobeerd in VS.Net 2003 die dll toe te voegen via Add Refrence. Dit werkte niet omdat het geen goede dll was of geen goed com component aldus Visual Studio.
Toen maar op zoek gegaan naar informatie over managed en unmanaged code. Genoeg gevonden. Voorbeeld van MSDN gevolgt, gerund maar als ik op de knop druk die de methode in de dll aan moet roepen, gebeurt er niets. Overige acties (ervoor en ernaar) worden uitgevoerd, alles staat in try catch blok maar ik krijg geen foutmeldingen.
De delphi functie in de dll is als volgt
Het zijn allemaal gewone input variabelen. Op de ReadDataProc na, deze retourneert iets (als ik het goed begrijp uit de handleiding).
Hierover zegt de documentatie bij de dll:
ReadDataProc
Callback procedure. The procedure which is called to return decrypted received
data to the host application.
Format:
Mijn C# code is als volgt (gebaseerd op het voorbeeld van MSDN):
Volgens mij gaat er iets niet goed bij het retourneren van de waarde, of het opvangen daarvan. Als ik de functie naam aan pas (onder het DllImport attribuut) dan krijg ik wel de error dat de functie niet gevonden is. De code vind de methode in de dll dus wel, dan wel heeft door dat een methode niet aanwezig is in de dll.
Ik hoop dat iemand ziet wat hier fout gaat.
Mocht er meer info nodig zijn dan hoor ik het graag en als ik een oplossing heb gevonden dan zal ik die hier ook melden. Alvast bedankt voor de tips/oplossingen
Ik heb een Delphi 7 dll gekregen met een programmatje erbij dat gebruikt maakt van die dll. Dit werkt natuurlijk geweldig.
Maar nu wil/moet ik een eigen programma in C# schrijven dat ook gebruik maakt van deze dll.
Eerst heb ik geprobeerd in VS.Net 2003 die dll toe te voegen via Add Refrence. Dit werkte niet omdat het geen goede dll was of geen goed com component aldus Visual Studio.
Toen maar op zoek gegaan naar informatie over managed en unmanaged code. Genoeg gevonden. Voorbeeld van MSDN gevolgt, gerund maar als ik op de knop druk die de methode in de dll aan moet roepen, gebeurt er niets. Overige acties (ervoor en ernaar) worden uitgevoerd, alles staat in try catch blok maar ik krijg geen foutmeldingen.
De delphi functie in de dll is als volgt
Delphi:
1
2
3
4
| function SendCommand(Host: shortstring; Port: integer; Data: shortstring; Version, MessageType: integer; Key: shortstring; ReadDataProc: TReadDataProc; CustID: integer): integer; |
Het zijn allemaal gewone input variabelen. Op de ReadDataProc na, deze retourneert iets (als ik het goed begrijp uit de handleiding).
Hierover zegt de documentatie bij de dll:
ReadDataProc
Callback procedure. The procedure which is called to return decrypted received
data to the host application.
Format:
code:
1
| TReadDataProc = procedure(IP, Response: shortstring); |
Mijn C# code is als volgt (gebaseerd op het voorbeeld van MSDN):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| // Buiten de klasse, binnen de namespace declaar ik
public delegate bool TReadDataProc(string IP, string Response);
//Vervolgens net na de main declareer ik
[DllImport("ANEXP")]
public static extern int SendXCPCommand(string Host, int Port, string Data, int XcpVersion, int MessageType, string XcpKey, TReadDataProc ReadDataProc, int CustomerID);
//Daarna wordt in de click van een button
private void button1_Click(object sender, System.EventArgs e)
{
try
{
TReadDataProc ProcessIncoming = new TReadDataProc(Form1.ShowResult);
SendXCPCommand1(txtHost.Text, int.Parse(txtPort.Text), txtData.Text, int.Parse(txtVersion.Text), int.Parse(txtMessageType.Text), txtKey.Text, ProcessIncoming, int.Parse(txtCustID.Text));
}
catch (Exception fout)
{
MessageBox.Show(fout.Message + "\n" + fout.StackTrace);
}
}
//Daarna komt de methode
public static bool ShowResult(string IP, string Response)
{
MessageBox.Show("ProcessIncoming(\"" + IP + "\", \"" + Response + "\");");
return true;
} |
Volgens mij gaat er iets niet goed bij het retourneren van de waarde, of het opvangen daarvan. Als ik de functie naam aan pas (onder het DllImport attribuut) dan krijg ik wel de error dat de functie niet gevonden is. De code vind de methode in de dll dus wel, dan wel heeft door dat een methode niet aanwezig is in de dll.
Ik hoop dat iemand ziet wat hier fout gaat.
Mocht er meer info nodig zijn dan hoor ik het graag en als ik een oplossing heb gevonden dan zal ik die hier ook melden. Alvast bedankt voor de tips/oplossingen
[ Voor 9% gewijzigd door Arie-Kanarie op 26-01-2006 15:26 . Reden: Wat extra info toegevoegd ]
Software ontwikkelen in de Achterhoek voor leuke klanten door heel Nederland? Klik hier