小弟昨天刚学delphi,遇到很多简单的语法问题,不大懂,请各位哥哥姐姐多多指教,谢谢了先。
1、怎样在string和CHAR*间转换??如使用lstrcpy之类的函数的时候(我用了一个强行转换的办法,但好象不太对)
2、以下代码老是说我什么参数有错的有错,请问是何原因?
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls,Tlhelp32;
//....中间代码略
procedure TFormMain.BitBtnUpdateWindowClick(Sender: TObject);
var
hCurrentHwnd:HWND;
hModuleSnap:Cardinal;
peId:DWORD;
FilePath:string;
me32:MODULEENTRY32;
TempString:string;
begin
hCurrentHwnd:=GetForegroundWindow;
GetWindowThreadProcessId(hCurrentHwnd,@peId);
hModuleSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,peID);
if(hModuleSnap<>INVALID_HANDLE_VALUE) then
begin
ZeroMemory(@me32,sizeof( MODULEENTRY32));
me32.dwSize:=sizeof( MODULEENTRY32); if(Module32First(hModuleSnap,@me32)=1) then
begin
repeat
TempString:=me32.szExePath;
if(Pos('.exe',TempString)>0) then
begin lstrcpy(PAnsiChar(FilePath),me32.szExePath);
break;
end
until (Module32Next(hModuleSnap,@me32)=0) end
endend;
错误提示在
if(Module32First(hModuleSnap,@me32)=1) then
和 until (Module32Next(hModuleSnap,@me32)=0)
这两行,错误为:
[Error] UnitMain.pas(48): Types of actual and formal var parameters must be identical3、如何在双字节字符传与ansi字符串之间转换?
1、怎样在string和CHAR*间转换??如使用lstrcpy之类的函数的时候(我用了一个强行转换的办法,但好象不太对)
2、以下代码老是说我什么参数有错的有错,请问是何原因?
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls,Tlhelp32;
//....中间代码略
procedure TFormMain.BitBtnUpdateWindowClick(Sender: TObject);
var
hCurrentHwnd:HWND;
hModuleSnap:Cardinal;
peId:DWORD;
FilePath:string;
me32:MODULEENTRY32;
TempString:string;
begin
hCurrentHwnd:=GetForegroundWindow;
GetWindowThreadProcessId(hCurrentHwnd,@peId);
hModuleSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,peID);
if(hModuleSnap<>INVALID_HANDLE_VALUE) then
begin
ZeroMemory(@me32,sizeof( MODULEENTRY32));
me32.dwSize:=sizeof( MODULEENTRY32); if(Module32First(hModuleSnap,@me32)=1) then
begin
repeat
TempString:=me32.szExePath;
if(Pos('.exe',TempString)>0) then
begin lstrcpy(PAnsiChar(FilePath),me32.szExePath);
break;
end
until (Module32Next(hModuleSnap,@me32)=0) end
endend;
错误提示在
if(Module32First(hModuleSnap,@me32)=1) then
和 until (Module32Next(hModuleSnap,@me32)=0)
这两行,错误为:
[Error] UnitMain.pas(48): Types of actual and formal var parameters must be identical3、如何在双字节字符传与ansi字符串之间转换?
解决方案 »
- 恭喜华仔升3星
- 如何可以判断两个label重叠了
- ★★★★★我也送阿日★★★★★
- 广州软件公司招C++builder或Dephi高手
- 怎么获取美女的心,看看这些...
- 怎么关闭已经调用的IE?
- 连续按键事件的烦恼!!!
- 请问:我设置了TabOrder:combobox1为2,edit1为3, 可当焦点在combobox1再回车时焦点不是往edit1里跑,而是跑其他地方?
- 简单问题,在DEPHI5中从一个字符串中取子字符串的方法? 马上给分。
- 请问:如何使用TreeView和webbrowser控件制作帮助?
- delphi写DLL ,返回变量为strilglist,问如何写调用才不会出错
- 调用ScrollBox的scaleby之后,他的子控件如果落在ClientRect之外,属性不刷新怎么办?
if(Module32First(hModuleSnap,me32)=1) then
和 until (Module32Next(hModuleSnap,me32)=0)
就可以了,me32对应的形参已经声明为传址调用,所以不需要显示传递一个指针过去。
{$EXTERNALSYM Module32First}
function Module32First(hSnapshot: THandle; var lpme: TModuleEntry32): BOOL;
{$EXTERNALSYM Module32Next}
function Module32Next(hSnapshot: THandle; var lpme: TModuleEntry32): BOOL;type
TModule32First = function (hSnapshot: THandle; var lpme: TModuleEntry32): BOOL stdcall;
TModule32Next = function (hSnapshot: THandle; var lpme: TModuleEntry32): BOOL stdcall;
请各位大侠帮小弟看看啊,谢谢了先
unit UnitMain;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls,Tlhelp32;type
TFormMain = class(TForm)
PageControlMain: TPageControl;
TabSheetWindowsControl: TTabSheet;
ListView1: TListView;
TabSheetProcessContrl: TTabSheet;
ListView2: TListView;
BitBtnUpdateWindow: TBitBtn;
procedure BitBtnUpdateWindowClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
FormMain: TFormMain;implementation{$R *.dfm}procedure TFormMain.BitBtnUpdateWindowClick(Sender: TObject);
var
hCurrentHwnd:HWND;
hModuleSnap:Cardinal;
peId:DWORD;
FilePath:string;
me32:TModuleEntry32;
TempString:string;
begin
hCurrentHwnd:=GetForegroundWindow;
GetWindowThreadProcessId(hCurrentHwnd,@peId);
hModuleSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,peID);
if(hModuleSnap<>INVALID_HANDLE_VALUE) then
begin
ZeroMemory(@me32,sizeof( MODULEENTRY32));
me32.dwSize:=sizeof( MODULEENTRY32);
// pme32:=@me32;
if(Tlhelp32.TModule32First(hModuleSnap,me32)=1) then
begin
repeat
TempString:=me32.szExePath;
if(Pos('.exe',TempString)>0) then
begin lstrcpy(PAnsiChar(FilePath),me32.szExePath);
break;
end
until (Module32Next(hModuleSnap,me32)=0) end
endend;end.
或者Move(@string[1],Pchar,len);CopyMemory,strcopy等等
2.就按上面說的應該沒錯
if(Module32First(hModuleSnap,me32)=1) then
until (Module32Next(hModuleSnap,me32)=0)
3.如果你只是簡單使用Unicode和Ansi,
你可以分開定義widestring和string.
你也可以轉換,當然API可以.Delphi中自己的函數我還不清楚.不過可以在string,widestring好像直接符值(沒直接測試過.我只用過參數傳遞,Format函數可以);對Delphi不是很熟悉,都是出現錯誤再更改或者查資料的