Delegacja metody do funkcji C w DLL i jej wielokrotne wywoł

Odpowiedz Nowy wątek
2006-09-16 22:36
t3q
0

Witam wszystkich :)

Mam pytanko. NApisałem sobie DLL'a w C w którym mam funkcję A w stylu:

DLL_EXPORT void A ( int x, int y, void (*func)(int a, int b ) )
{
  if ( func != NULL )
    func ( x, y );
}

Wszystko jest ok. Działa mi ładnie delegacja, jednak kiedy wprowadze małą modyfikację:

DLL_EXPORT void A ( int x, int y, void (*func)(int a, int b ) )
{
  while ( 1 )
  {
    if ( func != NULL )
      func ( x, y );
  }
}

DLL zwiesza się po 4 - 6 albo 8 pętli. Dlaczego i jak tego uniknąć ?

Reszta kodu:

public delegate void DELEGATE_A ( uint x, uint y );
DELEGATE_A dA;

void ShowXY ( int x, int y )
{
  MessageBox.Show("X: " +x.ToString() + " Y: " +y.ToString() );
  // WAŻNE tutaj idzie jeszcze modyfikacja ProgressBar więc dlatego nie ma static
}

[DllImport("jakistam.dll", CallingConvention=CallingConvention.Cdecl)]
static extern void A ( int x, int y, DELEGATE_A func );

public Konstruktor()
{
  this.dA = new DELEGATE_A ( ShowXY );
}

void metoda (...)
{
  A ( 10, 10, dA );
}

Mogłem coś pomieszać, ale ogólnie tak to wygląda.

Z góry dziękuję za wszelką pomoc :)

Pozostało 580 znaków

2006-09-16 23:42
t3q
0

Odpowiadając koledze na problem z buttonem, dochodzę do wniosku, że to chyba taki sam problem... Bądź co bądź wydaje mi się że DLL startuje w nowym wątku, więc trzeba zastosować BeginInvoke... Czy się nie mylę ?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0