2013-04-02 37 views
6

tôi có mã này:Làm thế nào để chuyển một biến chuỗi thành một hàm mong đợi một PChar?

ShellExecute(Handle, 'open', 
      'C:\Users\user\Desktop\sample\menu\WTSHELP\start.html', 
      nil, nil, sw_Show); 

Làm thế nào tôi có thể thay thế chữ trong đối số thứ ba với một biến chuỗi? Nếu tôi sử dụng mã như dưới đây nó không biên dịch.

var 
    dir: string; 

dir := 'C:\Users\user\Desktop\sample\menu\WTSHELP\start.html'; 
ShellExecute(Handle, 'open', dir, nil, nil, sw_Show); 
+2

Hãy chắc chắn rằng khi bạn gửi câu hỏi của bạn, bạn có bao gồm càng nhiều thông tin càng tốt. Ở đây, bạn nên cho chúng tôi biết 'dir' được khai báo như thế nào. Các câu trả lời dưới đây đưa ra giả định về loại. –

+1

Có, và mặc dù tôi biết vấn đề (được trả lời dưới đây), vấn đề là bạn nên luôn cho chúng tôi biết thông báo lỗi là gì (trong trường hợp này là sự nhầm lẫn giữa Chuỗi và PChar). –

Trả lời

8

Tôi giả định rằng dir là loại string. Sau đó,

ShellExecute(Handle, 'open', PChar(dir), nil, nil, SW_SHOWNORMAL); 

sẽ hoạt động. Thật vậy, trình biên dịch cho bạn biết điều này; nó nói cái gì đó như

[DCC Error] Unit1.pas(27): E2010 Incompatible types: 'string' and 'PWideChar' 

(Cũng cần lưu ý rằng bạn thường sử dụng SW_SHOWNORMAL khi bạn gọi ShellExecute.)

+0

haha, bạn đánh tôi trong một giây! – jachguate

+1

Và một khả năng khác là '@dir [1]' – OnTheFly

+0

Khi nó cho bạn biết, 'PWideChar', bạn không nên sử dụng PWideChar thay vì' PChar'? Vẫn còn một số người dùng D2007 hoặc thấp hơn ở đây :) – Sebastian

6

ShellExecute là một API Windows. Vì vậy, bạn cần phải vượt qua loại PChar cho nó.

Nếu tôi giả định một cách chính xác rằng biến dir của bạn là một chuỗi, sau đó bạn có thể cast chuỗi là một PChar, và gọi ShellExecute như sau:

ShellExecute(Handle,'open', PChar(dir) ,nil,nil,sw_Show); 
Các vấn đề liên quan