AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi-DLL mit String-Var-Parametern von VB aus aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-DLL mit String-Var-Parametern von VB aus aufrufen

Ein Thema von alzaimar · begonnen am 22. Feb 2006 · letzter Beitrag vom 22. Feb 2006
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Delphi-DLL mit String-Var-Parametern von VB aus aufrufen

  Alt 22. Feb 2006, 10:32
Ahoi!

Einfache Geschichte: Ich hab eine Delphi-Prozedur:
Procedure DoSomething (Var aParameter : String); Darum eine DLL und so deklarieren, das sie von VB aus ansprechbar ist. Nun hab ich kein VB, sonst würd ich da schon was finden, denn ich weiss schon, das ich den String als PChar und die Prozedur als stdCall deklarieren muss.

Procedure DLLWrapperDoSomething (aParameter : PChar); stdCall; Damit ist aber der aParameter noch kein 'Var' Parameter.

Reicht dann etwa ein
Procedure DLLWrapperDoSomething (Var aParameter : PChar); stdCall;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Delphi-DLL mit String-Var-Parametern von VB aus aufrufen

  Alt 22. Feb 2006, 10:38
dadurch das es ein PChar ist, ist es so als würdest du einen String als Var übergeben. Durch das Var wird ja nix anderes erreicht als das die Adresse der Variablen übergeben wird (anstelle die Variable zu kopieren). Und wenn du einen PChar hast ist das ein Pointer auf Zeischen. Das heißt du kannst wild auf dem rumschreiben worauf der PChar zeigt. Allerdings solltest du dabei beachten das der Speicher wo der PChar drauf zeigt auch groß genug ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Delphi-DLL mit String-Var-Parametern von VB aus aufrufen

  Alt 22. Feb 2006, 10:43
Hi Sir, danke für die schnelle Anwort.

Genau das ist glaube ich, mein Problem.

Ich deklariere also so was;
Delphi-Quellcode:
Libary MyDLL;
...
Procedure DLLWrapperDoSomething (aString : PChar);
Var
  s : String;

Begin
  s := String (aString);
  DoSomeThing (s);
  aString := PChar (s); // Hint/Warnung 'Zugewiesener Wert wird nicht verwendet' is ja auch logisch
End;
Reicht es, wenn man dem Aufrufer (also dem VB-Coder) sagt, das er seinen String gefälligst groß genug dimensionieren muss? Dann würde ich den PChar, wie Du sagtest, als Pointer auffassen, den veränderten String ('s') einfach da rein schreiben und die o.g. Deklaration verwenden (also ohne VAR).

Stimmt, machen die Window-API-Routinen auch so...

Danke!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Delphi-DLL mit String-Var-Parametern von VB aus aufrufen

  Alt 22. Feb 2006, 12:32
genau, sie windows-api-routinen machen das auch so.
Wenn du es wie die Windowsapi machen willst wäre es das sinnvollste das du einen weiteren Parameter hinzufügst der angibt wieviel speicher zur Verfügung steht (und falls dieser nicht reicht machst du eben nix). Desweiteren würde ich das ganze zu einer funktion umformen die zurück gibt wieviel zeichen in den PChar geschrieben wurden bzw. wie groß der Speicher sein müsste.
Wenn du also 2 Zeischen auf den PChar copieren willst solltest du als Rückgabewert eine 20 setzen. Wenn dann jemand die funktion aufruft mit zu wenig speicher (10 byte) so weiß er durch die Rückgabe der 20 das er das ganze nochmal aufrufen muss mit einer Speichergröße von 20.
Oder im umgekehrten Fall. Es ruft jemand die Funktion auf mit einer Speichergröße von 30. Durch die Rückgabe der 20 weiß der Aufrufer das er nur die ersten 20 zeischen nutzen sollte und der Rest Datenmüll ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 21:05 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