procedure TCamera_F.btn1Click(Sender: TObject);
var
PhotoName : string;
begin
PhotoName := 'D:\JETT\1.BMP'
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, LongInt(PAnsiChar(PhotoName)));
end;
end;
上面程序的结果在程序的目录下生成了一个名为 'D'的文件。
显然不是想要的结果但是如果后面一句写成
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, LongInt(PAnsiChar('D:\JETT\1.BMP')));
就可以正常将图像保存到指字文件中。我想回该是sendMessage的最后一个参数出了问题,
PAnsiChar()好像不行。
Pchar也不行
Pwidechar也不行。那要怎么做才行啊。????
2. String 所存字符串是在堆分配内存的,String变量实际上是指向零终止字符串的指针,与此同时它还具有引用计数(reference count)功能,并且自身保存字符串长度,当引用计数为零时,自动释放所占用的空间。
3.将string赋值给另一个string,只是一个简单的指针赋值,不产生copy动作,只是增加string的引用计数;
4.将一个PChar变量类型赋值给一个string 变量类型会产生真正的Copy动作,即将PChar所指向的字符串整个copy到为string分配的内存中;
5.将string赋值给一个PChar变量类型,只是简单地将string的指针值赋值给PChar变量类型,而string的引用计数并不因此操作而发生变化,因为这种情况PChar会对string产生依赖,当string的引用计数为零自动释放内存空间后,PChar很可能指向一个无效的内存地址,在你的程序你必须小心对付这种情况。
6.对PChar的操作速度要远远高于对string操作的速度,但PChar是一种落后的管理字符串的方式,而string则以高效的管理而胜出,PChar它的存在只是为了兼容早期的类型和操作系统(调用Windows API时会经常用到),建议平常使用string。
var
PhotoName : array[0..MAXBYTE-1] of char;
begin
PhotoName := 'D:\JETT\1.BMP';
if hWndC <> 0 then
begin
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, LongInt(@PhotoName[0]));
end;
end;
2、如僵哥解释的,可以用sendmessageW unicode版本试看看
可以用sendmessageW unicode版本试看看