AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Variablenübergabe C-Programm an Delphi dll - Probleme
Thema durchsuchen
Ansicht
Themen-Optionen

Variablenübergabe C-Programm an Delphi dll - Probleme

Ein Thema von Susanne · begonnen am 23. Jan 2007 · letzter Beitrag vom 23. Jan 2007
Antwort Antwort
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, 15: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
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Variablenübergabe C-Programm an Delphi dll - Probleme

  Alt 23. Jan 2007, 16:08
Poste doch mal mit Code- bzw. Delphi-Tags.
Schreib doch auch eine wirklich verstaendliche Frage mit vollstaendigen Informationen.
Gebraucht werden die Funktinosdeklarationen auf C- und Delphi-Seite.

Mein Verdacht ist das die DLL nicht mit stdcall an den Funktionen deklariert ist.
  Mit Zitat antworten Zitat
Susanne

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

Re: Variablenübergabe C-Programm an Delphi dll - Probleme

  Alt 23. Jan 2007, 16:17
folgend ist die delphi-dll, die letztendlich erst mal nur die ihr übergebenen Werte anzeigen soll.

Delphi-Quellcode:
library notiz;

uses
  SysUtils,
  Classes,
  ComObj,
  ActiveX,
  StdVcl,
  Windows,
  Messages,
  Variants,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  ExtCtrls,
  uLogFile;

{$R *.res}

function anhaengen(docID, dbID, text: PChar): Integer; cdecl;
var
  LogFile : TLogFile;
  LogName : String;
begin
  Result:= 0;
  CoInitialize(nil);
  Result:= 100;
  LogFile:= TLogFile.Create;
  LogName:= ExtractFilePath(Application.ExeName)+'NotizAnhaengen.log';
  LogFile.LogInfo('---NotizAnhaengen gestartet ---------------', LogName, 0, 0);
  LogFile.LogInfo('docid, dbid, notiz: '+ trim(docid)+','+ trim(dbid) +','+trim(text), LogName, 0, 0);
  LogFile.LogInfo('Result: '+ inttostr(Result), LogName, 0, 0);
  exit;
end;


exports
  anhaengen;

begin
end.
Susanne
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Variablenübergabe C-Programm an Delphi dll - Probleme

  Alt 23. Jan 2007, 16:27
Wann genau kommt notiztx an, wenn du nur notiz übergibst?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Susanne

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

Re: Variablenübergabe C-Programm an Delphi dll - Probleme

  Alt 23. Jan 2007, 16:37
das sollte in dem Aufruf natürlich auch notiztx heissen

wenn ich die Aufruf in dieser Reihenfolge nacheinander aufrufe - dann kommt in der Dll notiztx an
Code:
//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';
  }

wenn ich die Aufruf in dieser Reihenfolge nacheinander aufrufe - dann kommt in der Dll docid und arcid an
Code:
  //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';
  }

  //von RFC_CHAR nach CHAR umwandeln
  GETCHAR(*iIArchivDocId, docId);
  GETCHAR(*iIArchivId, arcId);
Aber egal wie rum nun, es kommen nie alle drei an.
Susanne
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Variablenübergabe C-Programm an Delphi dll - Probleme

  Alt 23. Jan 2007, 19:19
Mach mal
typedef char (* __cdecl DLLFUNC)(char*, char*, char*);
damit die calling convention nicht von den Projektoptionen abhaengig ist.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz