域名格式为 abc.mycompany.com,如果只要abc这个短域名,方法比较简单:
- function fGetDomainName: String;
- var vlDomainName : array[0..30] of char;
- vlSize : ^DWORD;
- begin
- New(vlSize);
- vlSize^ := 30;
- ExpandEnvironmentStrings(PChar('%USERDOMAIN%'), vlDomainName, vlSize^);
- Dispose(vlSize);
- Result := vlDomainName;
- end;
如果要完整域名,稍麻烦些:
- //先定义输入类型,
- type
- COMPUTER_NAME_FORMAT = (
- ComputerNameNetBIOS,
- ComputerNameDnsHostname,
- ComputerNameDnsDomain,
- ComputerNameDnsFullyQualified,
- ComputerNamePhysicalNetBIOS,
- ComputerNamePhysicalDnsHostname,
- ComputerNamePhysicalDnsDomain,
- ComputerNamePhysicalDnsFullyQualified,
- ComputerNameMax);
- //GetComputerNameEx这个函数可以根据上面的输入要求输出各种信息,但是要在此声明:
- function GetComputerNameEx(NameType: COMPUTER_NAME_FORMAT; lpBuffer: LPSTR;
- var nSize: DWORD): BOOL; stdcall; external 'kernel32.dll' name 'GetComputerNameExA';
- //使用ComputerNameDnsDomain参数可以得到完整域名
- function fGetDomainName: String;
- var vlDomainName : array[0..30] of char;
- vlSize : ^DWORD;
- begin
- New(vlSize);
- vlSize^ := 30;
- GetComputerNameEx(ComputerNameDnsDomain,vlDomainName, vlSize^);
- Dispose(vlSize);
- Result := vlDomainName;
- end;
在windows 7 64位上新装了Delphi 6,编译AMSIM时一切正常,但是编译solids时,出错compiled with a different version of XXX。试着重新下载了最新的源文件,尝试rebuild all projects,都报同样的错。
后来发现,出错的文件是SOLIDS和PVTPRO共用的单元文件,该文件存放在PVTPRO的目录里,里面使用了{$IFDEF}预编译指令来对不同的项目使用了不同的代码,在SOLIDS进行编译时,因为找不到这几个文件的源文件,所以直接引用了DCU,而在PVTPRO中编译过的DCU文件与在SOLIDS应该使用的有所不同,就出现了compiled with a different version of XXX的错误。要解决这个问题,就要使不同的项目在编译时,都需要找到这几个源文件并重新编译。
解决方法:在SOLIDS的project options中,在Directory/Search path中把那几个源文件所在的目录加进去。再编译,通过。
刚完成了AMSIM,现在要进行solids的改良,原来SOLIDS一切正常,但是现在编译时突然报错"File not found: "inputUnit.dfm"",一共有6个这种错误. 这些错误在做语法检查时不会出现,在编译时,COMPILING也没错,一到LINKING就报错.
奇怪的是,这6个xxx.dfm都是AMSIM中的文件,和solids完全没有关系.
编译虽然出错,但是SOLIDS.EXE文件却可以生成.生成的EXE文件运行起来有问题,想要DEBUG,却因为有这6个DFM找不到的错而不能进行.
再打开HYDRATE,编译一样出现这个错误,说找不到这6个DFM文件.
这3个项目有一些公用的模块,但不是这6个DFM.
在出错的2个项目目录中搜索这6个DFM的文件名,但都找不到.

把这6个DFM文件复制到SOLIDS目录下,编译就能通过.
通过以后再进行DEBUG,发现在CREATE WELCOMEFORM时有错,进入DPR文件一看,原来WELCOMEFORM的路径不对...应该是JACK在更新OMNIWORKS时把以前废弃的DPR文件给传上去了...改成正确的目录后,编译通过.再把原来复制进来的6个DFM文件删除,再编译也通过了...
一切恢复原样.
- { Getting the Windows Directory }
- function GetWinDir: string;
- var
- dir: array [0..MAX_PATH] of Char;
- begin
- GetWindowsDirectory(dir, MAX_PATH);
- Result := StrPas(dir);
- end;
- function WindowsDirectory: string;
- var
- WinDir: PChar;
- begin
- WinDir := StrAlloc(MAX_PATH);
- GetWindowsDirectory(WinDir, MAX_PATH);
- Result := string(WinDir);
- if Result[Length(Result)] <> '\' then
- Result := Result + '\';
- StrDispose(WinDir);
- end;
- function GetWindowsDirectory(var S: String): Boolean;
- var
- Len: Integer;
- begin
- Len := Windows.GetWindowsDirectory(nil, 0);
- if Len > 0 then
- begin
- SetLength(S, Len);
- Len := Windows.GetWindowsDirectory(PChar(S), Len);
- SetLength(S, Len);
- Result := Len > 0;
- end else
- Result := False;
- end;
- { Getting the System Directory }
- function SystemDir: string;
- var
- dir: array [0..MAX_PATH] of Char;
- begin
- GetSystemDirectory(dir, MAX_PATH);
- Result := StrPas(dir);
- end;
- function SystemDirectory: string;
- var
- SysDir: PChar;
- begin
- SysDir := StrAlloc(MAX_PATH);
- GetSystemDirectory(SysDir, MAX_PATH);
- Result := string(SysDir);
- if Result[Length(Result)] <> '\' then
- Result := Result + '\';
- StrDispose(SysDir);
- end;
- function GetSystemDirectory(var S: String): Boolean;
- var
- Len: Integer;
- begin
- Len := Windows.GetSystemDirectory(nil, 0);
- if Len > 0 then
- begin
- SetLength(S, Len);
- Len := Windows.GetSystemDirectory(PChar(S), Len);
- SetLength(S, Len);
- Result := Len > 0;
- end else
- Result := False;
- end;
- { Getting the Temporary Directory }
- function GetTempDir: string;
- var
- Buffer: array[0..MAX_PATH] of Char;
- begin
- GetTempPath(SizeOf(Buffer) - 1, Buffer);
- Result := StrPas(Buffer);
- end;
- function GetTempPath: string;
- var
- TmpDir: PChar;
- begin
- TmpDir := StrAlloc(MAX_PATH);
- GetTempPath(TmpDir, MAX_PATH);
- Result := string(TmpDir);
- if Result[Length(Result)] <> '\' then
- Result := Result + '\';
- StrDispose(TmpDir);
- end;
- function GetTempPath(var S: String): Boolean;
- var
- Len: Integer;
- begin
- Len := Windows.GetTempPath(0, nil);
- if Len > 0 then
- begin
- SetLength(S, Len);
- Len := Windows.GetTempPath(Len, PChar(S));
- SetLength(S, Len);
- Result := Len > 0;
- end else
- Result := False;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- label1.Caption := GetWinDir;
- label2.Caption := GetSysDir;
- label3.Caption := GetTempDir;
- end;




