VB.NET import von C++.NET dll

bladepif

Grünschnabel
Hallo an alle,

ich hab da ein Problem mit dem iport einer C++ DLL. Die deklaration der function bringt mir immer wieder einen Fehler:

System.Runtime.InteropServices.MarshalDirectiveException wurde nicht behandelt.
Message="return value kann nicht gemarshallt werden: Ungültige verwaltete/nicht verwaltete Typenkombination.."

Ich versuche diese Function aus einer C++ Dll zu importieren, die Beschreibung der funktion ist:
extern MPEGDLL_API HJPEGTRANSCODER __stdcall MPEG_InitJPEGTranscoder( int iUseYOnly);

extern MPEGDLL_API unsigned char* __stdcall MPEG_JPEGTranscodeFrame(HJPEGTRANSCODER hTransCtx, unsigned char *pucMPEGEncodedBuffer, int iInputBuffSize, int *piOutSize);


in VB.Net habe ich den iport so gemacht:
<DllImport("MPEGDLL.dll", CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function MPEG_InitJPEGTranscoder(ByVal iUseYOnly As Int32) As Integer
End Function

<DllImport("MPEGDLL.dll", CallingConvention:=CallingConvention.StdCall)> _
Public Shared Function MPEG_JPEGTranscodeFrame(ByVal hndw As Integer, <MarshalAs(UnmanagedType.LPArray)> ByVal MPEGBuffer() As Byte, ByVal iInputBuffSize As Int32, ByVal piOutSize() As Byte) As Byte()
End Function

Wie muss ich den MPEG_JPEGTranscodeFrame deklarieren damit es klappt ? ich habe schon verschiede Versionen versucht, als Integer als String... aber es kommt immer wieder der gleiche fehler.

*piOutSize ist ein pointer der die grösse des Byte array enthält der fon der Function zuruck gegeben wird.

Kann mir jemand helfen das zu lösen.

Vielen dank
CU Online
 
Hi und willkommen im Forum

Wenn die DLL in C++.NET geschrieben ist, wieso fügst du diese nicht einfach ganz normal als Referenz hinzu? Dann hättest du die Probleme nicht
 
Hallo niggo,

leider geht es nicht ich weis nicht genau wie die dll geschrieben und Kompaliert wurde.
Das ist eine dll die von einem Hersteller von Hardware mit geliefert wurde und der hat recht wenig Ahnung von VB.NET. also kann mir keiner der developpers da helfen.

Wenn ich die dll als Verweis auswähle, bekomme ich die Fehlermeldung das es kein gültige assembly oder COM Objekt wäre.

Also ist der einzige weg der mir bleib den dll import. ich weis das es nur eine frage des Datentypes format ist aber wie ich den Richtige auswähle da ist das Problem.

Also wenn jemand wie wie ich diesen Impport schreiben kann oder was der Herstellen machen müsste damit seine dll mit VB.NET auch kunktioniert, dann würde das mir sehr helfen. Die Fertigstellung von meinem Projekt hängt nur noch an dem Sch....

CU Online
 
Zurück