PDA

View Full Version : Convert String to PChar



asylu3
22-12-2004, 03:19 PM
Function ConvertStringToPChar(StringValue: String): PChar;
Var
PCharString: Array[0..255] of Char;
Begin
Result := StrPCopy(PCharString,StringValue);
End;


จากฟังค์ชั้นด้านบนโปรแกรมจะ return เป็น PChar
โดย PCharString: Array[0..255] of Char คือการสร้าง pointer ให้ชี้ไปยัง array ที่เป็น char ขนาด 256
แล้วคำสั่ง Result := StrPCopy(PCharString,StringValue);
คือการ copy ค่าแต่ล่ะตัวไปยัง array ที่ PCharString ชี้อยู่
เมื่อเสร็จแล้วจึง คืนค่ากลับไปยัง result

Korn
22-12-2004, 03:29 PM
จาก function ที่แปลงค่าสตริง เป็น pchar แล้วจะให้ทำ fucntion เปิด exe ตัวอื่น ๆ จาก

function Openpro(Pathval:pchar):Pchar stdcall;
begin
WinExec(Pathval, SW_SHOW);
end;
exports Openpro;
end.

จะเอามารวมกันเป็น fucntion เดียวยังไงครับ
เปลี่ยน Pathval เป็น Result ได้เลยหรือเปล่า โดยที่ Pathval รับมาจากโปรแกรมอื่นนะครับ

asylu3
22-12-2004, 06:02 PM
ไม่จำเป็นต้องรวมนะครับ
เรียกใช้ ConvertStringToPChar ข้างในฟังค์ชั่นนี้เลยแล้วก็เปลี่ยนการรับค่าของฟังค์ชั่นเดิมนิดหน่อยดังนี้

function Openpro(Pathval:String):Pchar stdcall; //รับค่าเป็น string แทน
begin
Pathval:=ConvertStringToPChar(Pathval); //เพิ่มบรรทัดนี้
WinExec(Pathval, SW_SHOW);
end;
exports Openpro;
end.

Korn
23-12-2004, 10:47 AM
??? ลองใช้แล้วครับ มัน ฟ้อง Error ว่า

[Error] SimpleMessageDLL.dpr(37): Incompatible types: 'String' and 'PAnsiChar'

ตรง WinExec(Pathval, SW_SHOW); ที่มีปัญหานะครับ

asylu3
23-12-2004, 04:42 PM
Opp sorry it 's my mistake. Use this one instead

function Openpro(Pathval:String):Pchar stdcall; //รับค่าเป็น string แทน
begin
WinExec(ConvertStringToPChar(Pathval), SW_SHOW);
end;
exports Openpro;
end.