除了ExtractFilePath这个函数可以获得程序路径外还有没有别的?
解决方案 »
- fastreport 多列重复相同内容
- 我用QuickRep做报表,在本机可以打印出来,但在网络打印机打印出空空的一张白纸
- 有人在线吗 进来下
- 如何 打开word文档
- c语言中的fopen和fwrite在dephi中该怎么来使用或者代替?
- 想调用一个外部DLL的函数,但是这个函数没有返回值
- 裸体脆求线程与数据库相关的问题,高手请进!!!
- 清高手指点对象类别和对象类型的区别是什么?感激不尽!
- windows 2003 让我头疼,怎么解决nt authory/system rpc 服务错误。
- 菜鸟经常听别人提起矢量图,不知是什么意思,大侠们教我几招吧,能有点帮助就行!!
- 如何使DateTimePicker1可以同时显示日期和时间????
- SQL Server不存在或拒绝访问
GetModuleFileName(null,Pchar(path),255);?????
报错。
我到是找到一个就是太太太太长了 ...
想简短一点 最好是只用window单元就能完成的.
procedure TForm1.FormCreate(Sender: TObject);
var
ModuleFileName: string;
begin
SetLength(ModuleFileName, MAX_PATH);
GetModuleFileName(GetModuleHandle(nil), @ModuleFileName[1], Length(ModuleFileName));
SetLength(ModuleFileName, StrLen(@ModuleFileName[1]));
ShowMessage(ModuleFileName);
ShowMessage(ExtractFilePath(ModuleFileName));
end;
getModulefileName
这里的@ModuleFileName[1],后面那个1是为什么加的啊 ?
因为GetModuleFileName函数原型的第二个参数是PChar类型,而6楼的代码定义的ModuleFileName是string类型。所以用@ModuleFileName[1]来取得字符串的首地址指针,这就跟PChar是指针一样了。当然你定义PChar然后给它分配内存,这是更一般化的做法。至于为什么是[1]而不是[0]嘛,因为string[0]保存的是字符串的长度,因而真正的有效字符从[1]开始。其实这几个函数很好用了,没必要去想什么办法在那里折腾了。还是结贴吧,呵呵
var
ModuleFileName: string;
H:Cardinal;
begin
SetLength(ModuleFileName, MAX_PATH);
H:=GetModuleFileName(hInstance,PChar(ModuleFileName),MAX_PATH);
Result:=Copy(ModuleFileName,1,H);
end;