Delphi 中定义PCMBufferkss可用:
Var
PCMBuffer : PBYTE;
分配和释放可用.
GetMem(PCMBuffer,Size);
FreeMem(PCMBuffer);在BCB的
extern "C" __declspec(dllexport) int __stdcall GetTTSData(String TextStr,
String IPStr, String FileName,PBYTE &PCMBuffer, int Speed)中定义的PCMBuffer参数就是一个普通的绶冲区指针,没什么特别的地方.
所以你在Delphi中只要定义一个PBYTE变量(它就是一个指针变量),然后为它分配内存即可.
Var
PCMBuffer : PBYTE;
分配和释放可用.
GetMem(PCMBuffer,Size);
FreeMem(PCMBuffer);在BCB的
extern "C" __declspec(dllexport) int __stdcall GetTTSData(String TextStr,
String IPStr, String FileName,PBYTE &PCMBuffer, int Speed)中定义的PCMBuffer参数就是一个普通的绶冲区指针,没什么特别的地方.
所以你在Delphi中只要定义一个PBYTE变量(它就是一个指针变量),然后为它分配内存即可.
解决方案 »
- Delphi2010 的设置问题
- 穷人请教:if语句的用法
- 如何在windows的工具栏显示多个窗体?
- 急救:如何获取IIS的信息(只要是可行的就给分)
- 关于交换两个整数(不借助第三个临时数)... 及 Delphi、VC、Asm 效率对比
- 有无好的DELPHI的书籍的下载网址呢
- 关于TTS中文语音合成的问题想请教大家(请大家帮帮忙)
- delphi 用dll 调用 stringgrid控件 老出错 请问有什么办法不出错 或加什么可以不出错 急~~~~
- 如何读取BIOS的密码?????
- 如何使用消息 WM_GETTEXT ?
- if screen.activeform.Components[i] is TDbEdit Then...这样写有什么错?为什么不认识TDbEdit?
- 如何修改WindowsXP启动时的LOGO画面,送500分
我现在要用delphi 写一个dll ;就是在dll分配内存出错;
getdata(buf:pchar);
beign
getmem(buf,size);
end;
delmem(buf:pchar);
begin
freemem(buf);
end;主程序中
var
p;pchar;getdata(p);
delmem(p);
好像无法成功
///////////dll
library PrjDll;
uses
windows, SysUtils, Classes;
{$R *.RES}
function file2char(var P:Pchar):integer; stdcall;export;
var
fm:Tfilestream;
begin
//MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK);
fm:=Tfilestream.Create('1.txt',fmopenread);
result := fm.size+1;
getMem(p,fm.size+1);
//MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK);
fm.read(p,fm.size);
fm.Free;
end;
procedure delmem(p:pchar);
begin
freemem(p);
end;
exports
file2char,
delmem;
begin
end.
//测试程序 function file2char(var P:Pchar):integer; stdcall;external 'PrjDll.DLL';
procedure delmem(p:pchar); stdcall;external 'PrjDll.DLL';
var
Form1: TForm1;implementation
var
p:pchar;
{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var isize:integer;
begin
//getmem(p,8); //如果分配的内存比实际需要的大没问题,小了就不行;
//我想知道dll中如何去改变内存大小;好像ReallocMem不行
//p[0]:=#0;
// MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK); isize:=file2char(p);
// MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK); if isize>0 then
begin
richedit1.Clear;
richedit1.Lines.add(p);
end
else richedit1.Lines.add('dfadfdas');
// freemem(p,isize);
delmem(p);
p:=nil;end;end.