Hallo!
Ich habe ein Problem mit dem Aufruf einer Funktion aus dem Unmanged Code.
Die Funktion in C-Notation lautet so:
int ReadCISharedMem(char* data, int StreamNo);
Die Funktion deklariere ich und rufe auf, auf folgende Seise:
[DllImport("Bcwin.dll")]
private static extern int ReadCISharedMem(ref string data, int StreamNo);
public int ReadCISharedMemImpl(ref string data, int StreamNo)
{
return ReadCISharedMem(ref data, StreamNo);
}
Nur kriege ich dabei folgende, sonderbare exception:
The runtime has encountered a fatal error. The address of the error was at 0x79e755fc, on thread 0xd9c. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.
Für mich heißt das, dass der char-Prameter der als Zeiger realisiert ist, hier Probleme macht und die Funktion anders aufgerufen werden muss.
Die Frage lautet nun, wie?
versuch mal mit **StringBuilder **statt ref string
Dann kriege ich die IndexOutOfRangeException:
Warning: A StringBuilder buffer has been overflowed by unmanaged code. The process may become unstable. Insufficient capacity allocated to the StringBuilder before marshaling it.
Insufficient capacity allocated to the StringBuilder before marshaling it. !!!
versuch mal mit
new StringBuilder(1024); z.B.