Hallo liebe Delphi-Praxis Community,
ich bin hier noch sehr neu. Daher weiß ich nicht, ob diese Problemstellung im richtigen Bereich gelandet ist.
Ich habe in Delphi eine
DLL gebaut, die einen Barcode erzeugt, als Bild zeichnet und abspeichert.
Die Funktion gibt den Pfad zur Bilddatei zurück.
Die
Dll möchte ich nun in VB.net nutzen. Der Aufruf der Funktion und Übergabe der Parameter funktioniert soweit.
Nur die Rückgabe des Pfads als String ist nicht erfolgreich.
Hier "stürzt" das Programm in VB.net ab.
Habt ihr evtl. Tipp, wie das mit der String-Rückgabe funktionieren könnte?
Oder auch einen anderen Ansatz? Über var-Parameter?(Habe ich auch schon begonnen, aber ohne Erfolg)
Vielen Dank schon einmal im Voraus!!
Hier meine Hauptfunktion in der Delphi
DLL:
Delphi-Quellcode:
function GenerateBarcodeLVD(ident, version: PWideChar): PWideChar; stdcall;
var
Input: String;
Filename: String;
Pfad: String;
begin
Input := WideCharToString(ident) + '~' + WideCharToString(version);
Filename := Input;
Pfad := GenerateBarcode(GenerateBINARY(Input), Filename);
StringToWideChar(Pfad, Result, length(Pfad));
end;
exports
GenerateBarcodeLVD;
Und hier der Aufruf in VB.net
Code:
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Public Class Form1
<DllImport("C:\temp\BarcodeGenerate.dll", EntryPoint:="GenerateBarcodeLVD",
SetLastError:=True, CharSet:=CharSet.Unicode,
ExactSpelling:=True,
CallingConvention:=CallingConvention.StdCall)>
Public Shared Function GenerateBarcodeLVD(ByVal ident As String, ByVal version As String) As String
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim barcodeDest As String
barcodeDest = GenerateBarcodeLVD("L1234567", "b-01")
MsgBox(barcodeDest)
End Sub
End Class
Als Fehler erscheint in VB:
Unbehandelte Ausnahme:
System.AccessViolationException: "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist."