Einzelnen Beitrag anzeigen

Susanne

Registriert seit: 21. Mai 2004
Ort: Lage
232 Beiträge
 
Delphi 2005 Professional
 
#1

Variablenübergabe C-Programm an Delphi dll - Probleme

  Alt 23. Jan 2007, 14:59
Folgendes Problem: In meiner delphi dll kommen einfach nicht alle drei Parameter an. Entweder es kommen docid und arcid an oder nur notiztx.

Wenn ich erst die Zuweisung mit GetChar mache und danach die einzelnen Werte aus der Tabelle auslese - dann kommen die Werte aus der Tabelle an (notiztx)

Wenn ich nun erst die Werte aus der Tabelle auslese und dann die beiden Zuweisungen mit GetChar mache - dann kommen docid und arcid an

Der jeweils fehlende Wert ist leer und das verstehe ich einfach nicht. Man sieht ja, wenn man beide Varianten ausprobiert, dass er richtige Werte übergibt, nur nicht alle drei. Hat jemand irgendeine Ahnung, woran das liegen könnte? Das Programm an sich läuft ohne Probleme durch und bricht auch nicht ab.

relevante übergebene Parameter
ITAB_H thItNotiz - das ist das Handle auf eine interne Tabelle
ZRWF_INV1_ARCHIV_ID *iIArchivId - Typ RFC_CHAR
ZRWF_INV1_ARC_DOC_ID *iIArchivDocId - Typ RFC_CHAR


Code:
RFC_RC WIN_DLL_EXPORT_FLAGS z_zrwf_notizen(RFC_HANDLE hRfc
                            ,ZRWF_INV1_ARC_DOC_ID *iIArchivDocId
                            ,ZRWF_INV1_ARCHIV_ID *iIArchivId
                            ,ITAB_H thItNotiz)
{

  unsigned int crow;
  char * lpt;
  int i;
  int len;
  //an die Variablen kommen, um diese zu übergeben
  char docId[100];
  char arcId[100];
  char notiz[1024];
  char notiztx[1024];
  //leer initialisieren
  notiztx[0] = '\0';
  notiz[0] = '\0';
  docid[0] = '\0';
  arcID[0] = '\0';

 
  //von RFC_CHAR nach CHAR umwandeln
  GETCHAR(*iIArchivDocId, docId);
  GETCHAR(*iIArchivId, arcId);


  //die Tabelle auslesen
  for (crow = 1;crow <= ItFill(thItNotiz); crow++) {
   
    lpt = (char *) ItGetLine(thItNotiz, crow);
    len = strlen(lpt)+1;

    memcpy( notiztx, (char *) ItGetLine( thItNotiz, crow ), len);
    notiztx[len] = '\0';
  }
   
  //dll laden und benutzen
  HMODULE handle;
  handle = LoadLibrary("notiz.dll");
  if (handle != NULL)
  {
    typedef char (*DLLFUNC)(char*, char*, char*);
    DLLFUNC func = (DLLFUNC)GetProcAddress(handle, "anhaengen");
    if (func != NULL)
   {                   
      i = func(docId, arcId, notiztx);
   }
  }
  FreeLibrary(handle);
  //dll ist wieder freigegeben
}
Susanne
  Mit Zitat antworten Zitat