主题:求助高手:关于获取计算机用户的菜鸟问题
xiaobaosky
[专家分:20] 发布于 2004-04-09 15:09:00
各位高手,偶现在正在编写一个注册号生成器,以便为偶的一个小程序提供安全保护。
现在遇到一个问题,偶想问问,getusername这个函数的调用格式。
偶是这样写的:
Procedure Tregcode.Bitbtn1click(Sender:TObject);
Var
User:pchar;
i:Integer;
Begin
i:=255;
getmem(User,255);//分配内存空间
getusername(User,i);//获取WINDOWS用户名
...
End;
调试中在getusername一行出现错误提示:
Types of actual and formal var parameters must be identical
请问这是怎么回事儿?
能介绍一下getusername的具体用法吗?
谢谢。
回复列表 (共11个回复)
沙发
zhlwyy [专家分:3530] 发布于 2004-04-09 19:26:00
你的形式参数必须与实际参数一致!
Types of actual and formal var parameters must be identical
Var
User:pchar;
i:Integer;
这里有问题!
板凳
SparkV [专家分:2070] 发布于 2004-04-09 21:53:00
按照getusername 的声明把用作调用参数的变量的类型声明修改一下即可--
Var
User:PAnsiChar;
i:Cardinal;
3 楼
kert [专家分:100] 发布于 2004-04-10 08:39:00
请问setusername这个函数在用时需要头文件吗?
系统提示我没有声明表识它
请问要怎么来用它?
4 楼
SparkV [专家分:2070] 发布于 2004-04-10 10:04:00
SetUserName?在WinAPI 的编程手册中并没有提到这个函数,该不会是你看见这个帖子里的getusername 这个API 函数后“臆想”的一个函数吧?在VCL 里倒是有一个IStreamLoader 对象拥有名为SetUserName 的方法,不过这应该不是你想要的。
5 楼
xiaobaosky [专家分:20] 发布于 2004-04-10 21:44:00
谢谢各位的回复
这个问题偶暂时用其他方法解决了。
不过偶对这个问题依然是不太清晰,谢谢各位高手的帮助。
偶现在有另一个问题想请问一下:
偶现在的程序使用了PARADOX数据库,使用BDE支持,所以偶在制作安装包的时候,把BDE也打包进去了
但偶用的肥猫安装制作软件却只能打包一个目录下的文件,请问偶如何才能把数据库程序文件夹中的程序也打包进去呢?
注:
偶在打包的过程中也试过把数据库所在的文件夹放到工程文件夹中,并修改BDE工作目录,本机调试成功。但打包后安装到其他计算机后数据库却还是无法访问。
唉说的太罗嗦了,不过我还是觉得说不清楚。
大家给介绍一点这方面的经验吧,呵可。
6 楼
SparkV [专家分:2070] 发布于 2004-04-11 01:25:00
“肥猫安装制作”本身有提取和打包BDE支持文件的功能,不需要用户操心BDE的支持文件是如何打包进来的。你只需在制作安装程序的时候,点击左部对象树上的“数据库支持”节点,此时右边的操作面板的下半部会出现数据库支持选择标签面板。其中的第一个标签页就是BDE,选中其中的“打包BDE”选项即可;如果想让目标系统具有BDE设置的能力,还可以把“包括BDE设置”选项也选上。剩下的工作就是生成安装程序了,跟普通软件的安装程序制作没什么两样。
7 楼
xiaobaosky [专家分:20] 发布于 2004-04-11 20:26:00
呵呵,多谢楼上高手的指点。
不过,你说的方法正是我使用过的,我打包了BDE,
也打包了数据库所在目录。
但在其他计算机上安装后程序还是无法运行。
是不是还应该打包其他的东西。
比如肥猫里还有SQL支持,
另外还有就是MDAC(这个不知道是什么东东)
这些是不是都需要打包呢?
请尽可能的说得更详细一些。
8 楼
SparkV [专家分:2070] 发布于 2004-04-12 18:45:00
啊~不好意思,上次回复的时候没看清你说的情况。我想这应该不是BDE 没安装好的问题,否则你的程序一运行就会出错了,而不会只是访问不到数据库那么简单。你的问题应该是数据库别名设置问题。具体来说就是:在本机程序开发时所设置的数据库别名(或数据库的绝对路径)和目标计算机的数据库别名(或数据库的绝对路径)不同而导致的。我这么说可能不好理解,不妨用一个简单的数据库应用程序的整个开发、打包和发布过程来予以说明:
假设我们要做一个简单的“学生成绩数据库”浏览程序。因为这只是一个浏览程序,所以可以事先把它的数据库表用某种工具(比如Delphi 自带的Database Desktop)创建并录入好所有的数据,最后保存为名字是CJ.DB 的PARADOX 数据库表文件。接下来按如下的步骤编写这个应用程序--
1. 打开Delphi,新建一个项目并把它保存在“D:\MyProgram\StudentAchievementView”这个文件夹中,然后打开资源管理器,进入“D:\MyProgram\StudentAchievementView”文件夹,在这个文件夹中创建一个名为“Database”的子文件夹,接下来把之前创建好的CJ.DB 数据库文件复制到这个“Database”子文件夹中。
2. 回到Delphi 的IDE,在窗体上依次放入Table1(类型:TTable)、DataSource1(类型:TDataSource)和DBGrid1(类型:TDBGrid)这三个控件。然后是控件属性的设置,把Table1 的DatabaseName 属性值设为“D:\MyProgram\StudentAchievementView\Database”也就是这个程序的数据库文件夹的绝对路径;把Table1 的TabelName 属性值设为“CJ.DB”;把DataSource1 的DataSet 属性值设为Table1;把DBGrid1 的DataSource 属性值设为DataSource1。最后,把Table1 的Active 属性值设为True 打开数据库表。此时在DBGrid1 中就会显示存储在CJ.DB 中的数据了。
运行这个程序,可以看到在窗口中有一个表格,其中显示了一个学生成绩数据库中的数据。显然,这是一个简单得不能再简单的程序了,在实际应用中编写这样的程序是没有多大意义的。但是,这是一个真正的数据库程序,它的运行依赖于BDE 的支持,这足以说明问题了。
OK!接下来是第二步工作--制作安装程序。这一步相信楼主应该很清楚了,因为数据库文件夹是项目文件夹下的一个子文件夹,所以打包程序的时候同时也会自动把数据库文件也打包进去。只是别忘了把BDE 也打包进去。
最后一步就是把制作好的安装程序拿到目标计算机上安装运行了。可以肯定的是,BDE 支持文件是肯定能装上去的,不信的话可以在制作安装程序的时候把“包括BDE 设置”选项也选上,看看安装完成后是不是可以在目标计算机的控制面板中找到BDE 设置程序就懂了。但是,在目标计算机上运行这个程序依然不能访问到数据库(除非在安装的时候选择程序的安装文件夹为“D:\MyProgram\StudentAchievementView”),这是为什么呢?呵呵~看到这里,相信大家应该已经有答案了:没错,就是数据库的路径问题!因为在开发这个程序的时候,我们给Tabel1 控件设置的DatabaseName 是数据库文件夹的绝对路径,当程序安装到目标计算机的时候,由于程序所在的文件夹改变了,预先设置好的数据库文件夹“D:\MyProgram\StudentAchievementView\Database”自然也就不存在了,这样当然不能访问数据库了。
现在楼主可能会说:“我用的不是数据库文件夹的绝对路径,而是数据库别名,而且在本机上也可以正常运行啊”。在这里请大家注意一个问题,对于PARADOX 这种本地数据库来说,它的数据库别名和它所在的文件夹的绝对路径其实并没有本质上的区别,至少对一般的数据库应用程序的编写来说是这样的。因为在用BDE 设置程序来设置本地数据库别名的时候,依据的也是文件夹的绝对路径。所以,楼主在调试程序的时候,把数据库文件夹放到项目文件夹,并修改BDE 工作目录(其实就是修改数据库别名)后,本机程序调试依然能够通过。但是打包安装到目标机时,由于在本机设置的工作目录与目标机不同,当然就不能访问数据库了。
其实解决这个问题也不难,可以有两个方法:第一个就是在制作安装程序的时候把“包括BDE 设置”选项也带上,这样在目标机上完成程序的安装后,可以通过控制面板中的BDE 设置程序依据程序的安装目录重新设置一次工作目录即可。当然,这个方法要求程序的用户本身对BDE 设置比较熟悉,这是肯定的了。
另一个方法就是在程序中添加动态设置数据库路径的代码。具体是这样,打开刚才编写的数据库程序,把Table1 的DatabaseName 和TableName 属性值设为空,Active 属性值设为false。然后,为主窗体添加OnCreate 事件处理程序,程序代码如下--
procedure TForm1.FormCreate(Sender: TObject);
var
DatabasePath:string;
begin
DatabasePath:=ExtractFileDir(CmdLine)+'\Database';
Delete(DatabasePath,1,1);
Table1.DatabaseName:=DatabasePath;
Table1.TableName:='CJ';
Table1.Active:=true
end;
这样,只要确保数据库文件夹位于项目文件夹之下,并且名为“Database”(当然,也可以取别的名字,只是需要在动态获取数据库文件夹路径的代码中做相应的修改),则不管是在本机调试程序,还是在目标计算机运行,都可以顺利地访问数据库了。
9 楼
xiaobaosky [专家分:20] 发布于 2004-04-14 14:15:00
只恨不能给你120分。
你说的太详细了!120%感谢。
10 楼
绿玉斗 [专家分:150] 发布于 2006-04-10 21:13:00
我也遇到同样的问题,这两种方法都用了,
第二种调试没通过,
1.[Warning] Unit3_dwsz.pas(56): Symbol 'CmdLine' is specific to a platform
2.另外还有数据库所在路径为无效路径的错误(数据库名字也用的是database)
第一种方法也试了,“包括BDE 设置”选项也选了,但在目标机上完成程序的安装后没找到BDE设置,
帮帮我!
我来回复