Announcement

Collapse
No announcement yet.

Signatur von c++ nach c# übersetzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Signatur von c++ nach c# übersetzen

    Hallo Experten,

    ich nutze eine vorcompilierte dll. Eine der Funktionen daraus erwartet eine Callback-Funktion als parameter. Das sagt die Doku:
    [highlight=c++]INT32 SICD_IntEnable(FUNCPTR inthandlerfunc);[/highlight]Dazu gibt es eine Beispielapplikation in C++. Dort wird die Funktion wie folgt benutzt:[highlight=c++]#define CALLBACK __stdcall

    typedef void (__stdcall *FUNCPTR)(long par1, long par2, long par3);

    void CALLBACK FSICAM_IRQCallback( DWORD dwFrameCnt, DWORD dwMemFlg, DWORD dwReserved )
    {
    // body
    }

    nRet = SICD_IntEnable( ( FUNCPTR )FSICAM_IRQCallback );
    [/highlight]

    Ich möchte weiterhin C# benutzen und versuchte das:[highlight=c#]delegate void CallbackDelegate(int par0, int par1, int par2);
    [DllImport("SonyICam", CharSet = CharSet.Ansi, SetLastError = false)]
    private static extern int SICD_IntEnable(CallbackDelegate ImagePendingDelegate);

    void ImagePending(int par0, int par1, int par2)
    {
    // body
    }

    try { IreturnValue = SICD_IntEnable(ImagePending); }[/highlight]Das funktioniert zumindest so weit, dass ImagePending() ausgeführt wird.
    Allerdings stürzt das Programm nach einiger Zeit (ca 50 x ImagePending()) ab.

    Das Programm stürzt schneller ab, wenn die Parameter als long übergebe, wie es in der Doku steht.

    Wie wird so ein Funktionsaufruf korrekt gehandhabt?


    luker
Working...
X