Questione : Passando il parm di PChar al DLL

Ho scritto un DLL con una funzione che prende un parametro di PChar e restituisce un booleano. Quando denomino la funzione da una prova app fornisce sempre un'avoirdupois. Ora la ho ridotta al relativo più fondamentale come sotto ma ancora ottengo il myDLLFunction di AV.

function (szText: PChar): Booleano; stdcall; risultato del
begin
: = allineare;
end; chiamate di app della prova del

My gradice questo:

procedure TForm1.Button1Click (Sender: TObject);
var
  szText: PChar;
begin
  szText:= “un certo testo„;
se showmessage del then
di myDLLFunction (szText) (“GIUSTO ");
end; il

I inoltre ha sostituito il PChar di chiamata con l'allineamento del carbone ma dello stesso risultato. Sono nuovo a DLLs e a PChar. Sono che faccio qualche cosa di stupido?
class= del

Risposta : Passando il parm di PChar al DLL

State dichiarandolo correttamente?
Ciò funziona per me.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
Project1, Unit1:

unità Unit1;

interfaccia

usi
  Windows, messaggi, SysUtils, varianti, codici categoria, grafici, comandi, forme,
  Dialoghi, StdCtrls;

tipo
  TForm1 = codice categoria (TForm)
    Button1: TButton;
    procedura Button1Click (mittente: TObject);
  riservato
    {Dichiarazioni riservate}
  pubblico
    {Dichiarazioni pubbliche}
  estremità;

varietà
  Form1: TForm1;

esecuzione

{$R *.dfm}

myDLLFunction di funzione (szText: PChar): Booleano; stdcall; external “project2.dll„;

procedura TForm1.Button1Click (mittente: TObject);
varietà
  szText: PChar;
cominciare
  szText: = “un certo testo„;
  se myDLLFunction (szText) allora
    showmessage (“GIUSTO ");
estremità;

estremità.

=======================

Progetto 2, singolo dpr:

biblioteca Project2;

{Nota importante circa l'amministrazione di memoria del DLL: ShareMem deve essere
  prima unità nella clausola di USI delle vostre biblioteche E nel vostro progetto (prescelti
  La fonte di Progetto-Vista) USA la clausola se il vostro DLL esporta qualunque procedure o
  funzioni che passano le stringhe come i parametri o risultati di funzione. Ciò
  si applica a tutte le stringhe passate a e da il vostro DLL--persino quelli quello
  sono annidati nelle annotazioni e nei codici categoria. ShareMem è l'unità di interfaccia a
  il responsabile di memoria comune di BORLNDMM.DLL, che deve essere schierato avanti
  con il vostro DLL. Per evit diare usando BORLNDMM.DLL, comunicare le informazioni della stringa
  using i parametri di ShortString o di PChar. }

usi
  SysUtils,
  Codici categoria;

{$R *.res}

myDLLFunction di funzione (szText: PChar): Booleano; stdcall;
cominciare
   Risultato: = allineare;
estremità;

esportazioni
  myDLLFunction;

cominciare

estremità.
Altre soluzioni  
 
programming4us programming4us