AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

habe DLL aber nur C++ und VB Beispiele

Ein Thema von alf.stefan · begonnen am 11. Jan 2005 · letzter Beitrag vom 12. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#1

habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 11:04
Hallo zusammen

ich habe eine DLL die ich verwenden will. Der Hersteller der das vertreibt unterstützt aber nur VB und C++.
Also sind in seiner Dokumentation auch nur VB und C++ Beispiele dabei.
Ich will aber Delphi verwenden also hab ich mal angefangen die C++ Header Files bzw. die entprechende .Bas Datei in Delphi zu übersetzen.
Das geht so weit auch. Und einige wenige funktionen kann ich auch schon beutzen
(vor allem die ohne Parameter Übeergabe)

C++

KMErrorCode EXPORTFCN KMTCPRefreshDevices( void ); // funktioniert in delphi
KMErrorCode EXPORTFCN KMTCPGetNumDevices( LPUINT16 lpnNumDevices ); // das auch

delphi
Function KMTCPRefreshDevices (): Long; cdecl; external 'KmApi32.DLL';
Function KMTCPGetNumDevices (lpnNumDevices : pWord): Long; cdecl; external 'KmApi32.DLL';

aber bei folgender Funktion geht nix
C++
/* TCPIP Server Control access functions */
KMErrorCode EXPORTFCN KMTCPGetDeviceInformation(char *lpszNameArray[], char *lpszAddressArray[], char *lpszSNArray[], UINT16 DIPArray[], int nNumDevices );

wie muß ich das hier machen??

es wird nachher in C++ verwendet wie folgt
/*------------------------------------------------------------------------*/
unsigned short NumberDevices = 0;
/* Force the API to look for devices on the network */
KMTCPRefreshDevices();
/* Get the number of devices found on serial and/or Ethernet */
KMTCPGetNumDevices(&NumberDevices);
/* Initialize the array to retrieve all device names, */
/* serial numbers, and IP addresses */
char **NameArray= new char*[NumberDevices];
char **IPArray = new char*[NumberDevices];
char **SNArray = new char*[NumberDevices];
UINT16 *DIPArray = new UINT16[NumberDevices];
for(int j=0;j<NumberDevices;j++)
{
NameArray[j]=new char[MAX_TCP_NM_LENGTH];
IPArray[j]=new char[MAX_TCP_IP_LENGTH];
SNArray[j]=new char[MAX_TCP_SN_LENGTH];
}
/* Retrieve the device information */
KMTCPGetDeviceInformation(NameArray, IPArray, SNArray, DIPArray,
NumberDevices);
/*------------------------------------------------------------------------*/

und wie muß ich das dan verwenden??

ich hoffe mir kann jemand helfen

Gruß Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 11:38
Hi Stefan,

diese char-Pointer-Arrays sind in Delphi folgendermaßen zu deklarieren:
TDynPCharArray = array of PChar; und das UINT16-Array so:
TDynWordArray = array of Word; also sähe die Methode-Deklaration folgendermaßen aus:
function KMTCPGetDeviceInformation(NameArray, AddressArray, SNArray: TDynPCharArray; DIPArray: TDynWordArray; NumDevices: Integer); cdecl; external 'KmApi32.dll'; MfG
Stevie

P.S. Code-Tags würden deinen Beitrag etwas besser lesbar machen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 13:30
Sorry Stevie, komplett falsch. "array of" ist nie zu einem C Typ kompatibel.

Delphi-Quellcode:
type
  PPChar = ^PChar;
  UINT16 = Word;
  PUInt16 = ^UINT16;

function KMTCPGetDeviceInformation(lpszNameArray: PPChar; lpszAddressArray: PPChar; lpszSNArray: PPChar; DIPArray: PUINT16; nNumDevices: Integer): KMErrorCode; cdecl;
Entweder gibt nNumDevices die Laenge der Arrays von PChars bzw UINT16 an oder die Arrays werden durch einen PChar = nil abgeschlossen.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 14:02
Zitat von Robert Marquardt:
Sorry Stevie, komplett falsch.
*sichvorschamimstaubwälz* ich werd mich nie mit c anfreunden...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#5

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 14:48
danke robert

weil mit dem Vorschlag von Stevie hatte ich so meine Probleme
aber mit den PPChar hab ich auch meine Probleme wie soll ich das denn initialisieren?
habs mal so versucht
Code:
   err := KMInitialize;
   NumDevices :=0;
   refresh := KMTCPRefreshDevices();
   getNum := KMTCPGetNumDevices(@NumDevices);
   if getNum = 0 then
   begin
      erg := 'Controllers Found '+IntToStr(NumDevices);
      for lLoop := 0 to NumDevices-1 do
      begin
        sNames^[lLoop] := '                                  ';
        sIP^[lLoop] := '                                  ';
        sSerStr^[lLoop] := '                                  ';
      end;
      err := KMTCPGetDeviceInformation(sNames, sIp, sSerStr, sDipArray, NumDevices);
   end;
aber so geht das nicht aber ich weiß auch gar nicht wie ich das überhaupt anpacken soll mit dem init?
ist das nicht sowas wie eine pointer liste?

ratloser Gruß
Stefan
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 17:06
Man sollte den Namen der Funktion lesen. Es werden offensichtlich eine Menge Puffer ausgefuellt.
Entsprechend ist der Parameter ein "Buffers: array [0..WASAUCHIMMER] of PChar" und jeder PChar muss seinerseits einen Puffer alloziiert haben.
Vermutlich steht in der Dokumentation wie lang so ein Name maximal sein kann.
Der Aufruf ist dann "KMTCPGetDeviceInformation(@Buffers[0], ...)"
Alternativ kann es sein das in Buffers nur Zeiger auf die intern vorgehaltenen Namen abgelegt werden.
Dann ist es nicht noetig die Elemente zu alloziieren, sondern man sollte dann die Elemente mit nil belegen.
Da kann aber nur die Dokumentation weiterhelfen.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 17:12
Zitat von Stevie:
ich werd mich nie mit c anfreunden...
Sachade, denn es ist definitiv die interessantere Sprache.
Ich habe zuerst C gelernt und bin froh darueber.
Im Gegensatz zum Durchschnitts-Pascal-Programmierer lernt man naemlich was ein Zeiger ist.

Gerade habe ich mal wieder eine besonders lustige Variablendeklaration in C anbringen koennen.

extern const volatile unsigned long int * const SomePointer;

Wer diese durchaus sinnvolle Deklaration entraetseln kann der gewinnt meine Hochachtung.
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#8

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 17:18
Danke einstweilenwerde das morgen gleich mal probieren.

Gruß Stefan
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 18:42
Zitat von Robert Marquardt:
extern const volatile unsigned long int * const SomePointer;

Wer diese durchaus sinnvolle Deklaration entraetseln kann der gewinnt meine Hochachtung.
Leicht Offtopic, aber naja...
Was du da machst, ist einen Zeiger zu deklarieren, bei dem weder der Wert des Zeigers noch der Wert des Datums, auf der der Zeiger zeigt, innerhalb des Programm verändert werden kann, wohl aber von außen. Sinn machen würde das ganze, wenn du einen Wert, der z.B. per Interrupt gesetzt wurde, in deinem Programm verfügbar machen wilsst und dabei 100% sichergehen musst (naja, 100%ige Sicherheit hast du wohl nie), dass der Wert nicht verfälscht wird.
Aber wozu man das braucht, fällt mir auch nicht ein
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: habe DLL aber nur C++ und VB Beispiele

  Alt 11. Jan 2005, 20:23
Hochachtung!
Brauchen kann man das natuerlich. Wie waere es mit einer Interrupt Tabelle in einem Mikrocontroller?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:39 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