Laden...

Funktion aus Unmanaged Code aufrufen

Erstellt von f.ritz vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.233 Views
f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 18 Jahren
Funktion aus Unmanaged Code aufrufen

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?

X
2.051 Beiträge seit 2004
vor 18 Jahren

versuch mal mit **StringBuilder **statt ref string

f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 18 Jahren

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.

X
2.051 Beiträge seit 2004
vor 18 Jahren

Insufficient capacity allocated to the StringBuilder before marshaling it. !!!

versuch mal mit

new StringBuilder(1024); z.B.