Delphi_ShareMem在dll中使用
2017-05-09 13:35
411 查看
原文链接
千里之行_12 2017-05-06 22:42:06 浏览39 评论0
string dll delphi ShareMem在dll中使用
摘要: Delphi ShareMem在dll中使用
dll项目
在项目中第一种调用方式:
这种调用方式在dll和项目中都不用shareMem,不爆异常。
第二种调用方式(动态加载dll):
在dll和项目中都不用shareMem,报异常。
在dll和项目中都用shareMem,不抛异常。
Delphi ShareMem在dll中使用
千里之行_12 2017-05-06 22:42:06 浏览39 评论0string dll delphi ShareMem在dll中使用
摘要: Delphi ShareMem在dll中使用
dll项目
library Project2; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses System.ShareMem, System.SysUtils, System.Classes, Winapi.Windows; //简繁体装换函数 function Cn2Big(CnStr: string): string; stdcall ; var Len: Integer; begin Len := Length(CnStr); SetLength(Result, Len); LCMapString(GetUserDefaultLCID, LCMAP_TRADITIONAL_CHINESE, PChar(CnStr), Len, PChar(Result), Len); end; function Big2Cn(bigStr: string): string; stdcall ; var Len: Integer; begin Len := Length(bigStr); SetLength(Result, Len); LCMapString(GetUserDefaultLCID, LCMAP_SIMPLIFIED_CHINESE, PChar(bigStr), Len, PChar(Result), Len); end; {$R *.res} exports Cn2Big, Big2Cn; begin end.
在项目中第一种调用方式:
type TForm4 = class(TForm) Button1: TButton; edt1: TEdit; edt2: TEdit; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; function Cn2Big(CnStr: string): string; stdcall ; external 'Project2.dll'; implementation {$R *.dfm} procedure TForm4.Button1Click(Sender: TObject); begin edt2.Text := Cn2Big(edt1.Text); end;
这种调用方式在dll和项目中都不用shareMem,不爆异常。
第二种调用方式(动态加载dll):
procedure TForm4.Button2Click(Sender: TObject); type TAddc= function(const input: string): string; stdcall; var hh: THandle; addc: TAddc; begin hh:= LoadLibrary('Project2.dll'); try if hh<>0 then @addc:= GetProcAddress(hh, PChar('Cn2Big')); if not (@addc = nil) then begin edt2.Text := addc(edt1.Text); end; finally FreeLibrary(hh); end; end;
在dll和项目中都不用shareMem,报异常。
在dll和项目中都用shareMem,不抛异常。
相关文章推荐
- Delphi_ShareMem在dll中使用
- DELPHI中使用DLL的方法以及INSTALLSHIELD中使用DLL方法
- DELPHI 使用DLL
- delphi中使用词霸2005的动态库XdictGrb.dll实现屏幕取词
- 在Delphi应用程序中使用DLL
- delphi中使用词霸2005的动态库XdictGrb.dll实现屏幕取词
- 在DELPHI应用程序中使用DLL
- Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】
- Delphi中动态链接库(DLL)的建立和使用
- delphi dll及函数指针的使用
- Delphi Dll中多线程无法使用Synchronize同步的解决方法(转)
- 在Delphi中使用DLL
- delphi中动态链接库dll的使用(转载)
- DELPHI使用TClientDataSet时不携带MIDAS.DLL的方法
- 在Delphi的DLL中使用FastReport要处理的几个问题
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用
- 在Delphi的DLL中使用FastReport要处理的几个问题
- Delphi中动态链接库(DLL)的建立和使用
- Delphi中动态链接库(DLL)的建立和使用