- 功能实现,尚有关于Delphi里函数参数B: PChar 与 var B: PChar 不同的疑问,暂放。
- VC--------- Dll
- // CharDll.cpp : 定义 DLL 应用程序的导出函数。
- //
- #include "stdafx.h"
- #include "CharDll.h"
- // 这是导出变量的一个示例
- CHARDLL_API int nCharDll=0;
- // 这是导出函数的一个示例。
- CHARDLL_API int fnCharDll(void)
- {
- return 42;
- }
- // 这是已导出类的构造函数。
- // 有关类定义的信息,请参阅 CharDll.h
- CCharDll::CCharDll()
- {
- return;
- }
- CHARDLL_API int FnTest1(char *A, char *B)
- {
- strcpy(B, A);
- strcat(B, "PYG");
- return strlen(B);
- }
- CHARDLL_API int FnTest2(char *A, char **B)
- {
- strcpy(*B, A);
- strcat(*B, "PYG");
- return strlen(*B);
- }
- CHARDLL_API int FnTest3(char *A, char *&B)
- {
- strcpy(B, A);
- strcat(B, "PYG");
- return strlen(B);
- }
- ---------------------------------------调用及用Delphi写的相应函数--------------------------------------
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
- type
- PPChar = ^PChar;
- type
- TForm1 = class(TForm)
- Edit1: TEdit;
- Edit2: TEdit;
- TestFn1: TButton;
- Label1: TLabel;
- Label2: TLabel;
- TestFn2: TButton;
- TestFn3: TButton;
- Button4: TButton;
- Button5: TButton;
- procedure TestFn1Click(Sender: TObject);
- procedure TestFn2Click(Sender: TObject);
- procedure TestFn3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- function DelTest1(A: PChar; B: PChar): Integer;
- function DelTest2(A: PChar; B: PPChar): Integer;
- end;
- var
- Form1: TForm1;
- function FnTest1(A: PChar; B: PChar): Integer; cdecl; external 'CharDll.dll';
- function FnTest2(A: PChar; B: PChar): Integer; cdecl; external 'CharDll.dll';
- function FnTest3(A: PChar; B: PChar): Integer; cdecl; external 'CharDll.dll';
- implementation
- {$R *.dfm}
- procedure TForm1.TestFn1Click(Sender: TObject);
- var
- pA, pB: PChar;
- iB, i: Integer;
- begin
- pA := PChar(Edit1.Text);
- GetMem(pB, 100);
- iB := FnTest1(pA, pB);
- Edit2.Text := StrPas(pB);
- FreeMem(pB);
- end;
- procedure TForm1.TestFn2Click(Sender: TObject);
- var
- pA, pB: PChar;
- iB, i: Integer;
- begin
- pA := PChar(Edit1.Text);
- GetMem(pB, 100);
- iB := FnTest2(pA, @pB);
- Edit2.Text := StrPas(pB);
- FreeMem(pB);
- end;
- procedure TForm1.TestFn3Click(Sender: TObject);
- var
- pA, pB: PChar;
- iB, i: Integer;
- begin
- pA := PChar(Edit1.Text);
- GetMem(pB, 100);
- iB := FnTest3(pA, @pB);
- Edit2.Text := StrPas(pB);
- FreeMem(pB);
- end;
- function TForm1.DelTest1(A, B: PChar): Integer;
- var
- iLen: Integer;
- begin
- iLen := Length(A) + 3;
- FillChar(B^, iLen, #0);
- StrCopy(B, A);
- StrCat(B, 'PG');
- end;
- procedure TForm1.Button4Click(Sender: TObject);
- var
- pA, pB: PChar;
- iB: Integer;
- begin
- pA := PChar(Edit1.Text);
- GetMem(pB, StrLen(pA)+3);
- DelTest1(pA, pB);
- Edit2.Text := StrPas(pB);
- FreeMem(pB);
- end;
- function TForm1.DelTest2(A: PChar; B: PPChar): Integer;
- var
- iLen: Integer;
- begin
- iLen := Length(A) + 3;
- FillChar(PChar(B^)^, iLen, #0);
- StrCopy(PChar(B^), A);
- StrCat(PChar(B^), 'PG');
- end;
- procedure TForm1.Button5Click(Sender: TObject);
- var
- pA, pB: PChar;
- pC: PPChar;
- iB: Integer;
- begin
- pA := PChar(Edit1.Text);
- pC := @pB;
- GetMem(pB, StrLen(pA)+3);
- DelTest2(pA, pC);
- Edit2.Text := StrPas(pB);
- FreeMem(pB);
- {相当于上边的代码
- pA := PChar(Edit1.Text);
- GetMem(pC, 100);
- GetMem(pC^, StrLen(pA)+3);
- DelTest2(pA, pC);
- Edit2.Text := StrPas(pC^);
- FreeMem(pC^);
- FreeMem(pC);}
- end;
- end.