AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign C++ C++ builder / DELPHI DLL - Übergabe von String
Thema durchsuchen
Ansicht
Themen-Optionen

C++ builder / DELPHI DLL - Übergabe von String

Ein Thema von bernhard_LA · begonnen am 23. Okt 2016 · letzter Beitrag vom 2. Nov 2016
 
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.124 Beiträge
 
Delphi 11 Alexandria
 
#1

C++ builder / DELPHI DLL - Übergabe von String

  Alt 23. Okt 2016, 08:55
ich will Teile unserer Delphi Anwendung von einem C++ Modul aus nutzen , hierzu soll nun Delphi Code via DLL verwendet werden . Wir wollen ohne sharemem die Daten (Strings) austauschen.


der Code in der DLL sieht wie folgt aus

Delphi-Quellcode:
var aDatabase : TDatabase;

function Database_create ( server, database, objecttablename, libtablename: PChar; bufsvr, bufdb, bufobj, buflib : Word) : Pointer; stdcall;
begin

  aDatabase:= TDatabase.create(String(server), String(database),
    String(objecttablename), String(libtablename));

  result := aDatabase;
end;


function Database_ElementCount : Integer ;
begin
  result := aDatabase.ElementCount;
end;
zum Testen der DLL gibt es eine kleine Delphi Anwendung

Delphi-Quellcode:

/// Definition Funktion aus DLL
function Database_create(server, database, objecttablename,
  libtablename: PChar; bufsvr, bufdb, bufobj, buflib: Word): Pointer; stdcall;
  external 'databaseDLL.dll';


procedure TForm_database_create_DLLClick
  (Sender: TObject);
var
  server, database, objecttablename, libtablename: string;
begin
  server := lbledt_server.Text;
  database := lbledt_database.Text;
  objecttablename := 'table_name1';
  libtablename := 'tablename2';

  Database_create(PChar(server), PChar(database),
    PChar(objecttablename), PChar(libtablename), length(server),
    length(database), length(objecttablename), length(libtablename));

end;

ich kann mich auf die Datenbank verbinden und Daten lesen / schreiben, alles scheint zu funktionieren.

Nun der Versuch diese ´Datenbank auch via C++ Builder / DLL anzusprechen

in der Header Datei die Definition der Funktiosnprototypen


Delphi-Quellcode:
   
        VoidIn_IntOut Database_ElementCount ;
   StrStrStrStrIn_VoidOut Database_create;
in dann in der *.cpp Datei dann die eigentliche Implementierung

Delphi-Quellcode:

extern "C" __declspec(dllimport)
   StrStrStrStrIn_VoidOut __stdcall Database_create(char*, char*,
   char*, char*, int, int, int, int);





Database_create = (StrStrStrStrIn_VoidOut)::GetProcAddress
         (load, "Database_create");





void __fastcall TForm1::btn_create_classClick(TObject *Sender) {
   char* server = "localhost\\sqlexpress";
   char* database = "mydatabasetest";
   char* obj = "table1";
   char* lib = "table2";

   Database_create(server, database, obj, lib, 0, 0, 0, 0);
}



hierzu nun meine fragen

a) den Zeiger auf die in der DLL erzeugt Datenbank Klasse lasse ich beim Delphi Testprogramm "undefiniert", ist dies ein Fehler ?
b) der eigentlich Fehler liegt aber in der Umwandlung von PChar im Delphi Code nach Char* im C++ code. Alles als PAnsiChar zu deinieren hat aber leider auch nicht geholfen.


Was mache ich also falsch ?

Ergänzung :

C++ Builder und Delphi XE 2 , alles x32

Geändert von bernhard_LA (23. Okt 2016 um 20:37 Uhr)
  Mit Zitat antworten Zitat
 


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 05:30 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