我写了
function CreateProcess(
lpApplicationName:String;
lpCommandLine:String;
lpProcessAttributes:IntPtr;
lpThreadAttributes:IntPtr;
bInheritHandles:Boolean;
dwCreationFlags:Int32;
lpEnvironment:IntPtr;
lpCurrentDirectory:IntPtr;
lpStartupInfo:STARTUPINFO;
lpProcessInformation:ProcessInfo):Boolean;
external 'kernel32.dll';
但VStudio表示“分号”预计 - 在外部之后和“”结束“预期”在'kernel32.dll'之后; 你能帮忙我加载和调用一个函数吗?
答案 0 :(得分:4)
为什么不使用.NET Process Class ..在这种情况下使用interop没有多大意义,因为你已经在使用Delphi Prism ..
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
答案 1 :(得分:3)
@Ilya,您使用错误的语法来调用外部函数。您需要使用DllImport
关键字来使Windows互操作。
你必须将你的功能重写为
[DllImport("kernel32.dll")]
class function CreateProcess(
lpApplicationName:String;
lpCommandLine:String;
lpProcessAttributes:IntPtr;
lpThreadAttributes:IntPtr;
bInheritHandles:Boolean;
dwCreationFlags:Int32;
lpEnvironment:IntPtr;
lpCurrentDirectory:IntPtr;
lpStartupInfo:STARTUPINFO;
lpProcessInformation:ProcessInfo):Boolean; external;
检查此工作样本
namespace ConsoleApplication20;
interface
uses
System.Diagnostics,
System.Runtime.InteropServices;
type
PROCESS_INFORMATION =record
hProcess : IntPtr;
hThread : IntPtr;
dwProcessId : UInt32;
dwThreadId : UInt32;
end;
STARTUPINFO =record
cb : UInt32;
lpReserved: String;
lpDesktop : String;
lpTitle : String;
dwX : UInt32;
dwY : UInt32;
dwXSize : UInt32;
dYSize : UInt32;
dwXCountChars : UInt32;
dwYCountChars : UInt32;
dwFillAttribute : UInt32;
dwFlags : UInt32;
wShowWindow : ShortInt;
cbReserved2 : ShortInt;
lpReserved2 : IntPtr;
hStdInput : IntPtr;
hStdOutput : IntPtr;
hStdError : IntPtr;
end;
ConsoleApp = class
private
[DllImport("kernel32.dll")]
class method CreateProcess( lpApplicationName: string; lpCommandLine:string; lpProcessAttributes:IntPtr; lpThreadAttributes:IntPtr;
bInheritHandles:Boolean;dwCreationFlags: UInt32; lpEnvironment:IntPtr;
lpCurrentDirectory:string;var lpStartupInfo:STARTUPINFO;out lpProcessInformation:PROCESS_INFORMATION) : boolean; external;
public
class method Main;
end;
implementation
class method ConsoleApp.Main;
var
lpStartupInfo : STARTUPINFO;
lpProcessInformation : PROCESS_INFORMATION;
begin
lpStartupInfo := new STARTUPINFO();
lpProcessInformation := new PROCESS_INFORMATION();
Console.WriteLine('Creating Process');
CreateProcess('C:\WINDOWS\SYSTEM32\notepad.exe', nil, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, nil, var lpStartupInfo, out lpProcessInformation);
Console.ReadLine();
end;
end.
检查这些mmore info
的链接