Q&A

  • 운영체제에 따라 컴파일을 따로 할수없는지요?
안녕하세요.
우선 문제는 제가... 작업그룹을 알아낼려고 하는데... Win98과 2000, XP는 작업그룹을 알아네는 방법이 틀리네요...

그래서 아래와 같이 한 PAS에서 설정하고 컴파일 하니.. 에러가 납니다.
Win2000에서는 문제가 없는듯 보이고 WIn98에서는 컴파일시 에러가 납니다.

function NetApiBufferFree(Buffer: Pointer): LongWord; stdcall;
function NetWkstaGetInfo(ServerName: LPWSTR; Level: DWORD; var BufPtr: Pointer): DWord; stdcall;
이 부분인것 같은데.... 98에서는 참조 하는 함수가 없어서 그런것 같습니다.

질문의 요지는 IFDEF ~ ENDIF 컴파일러 함수을 사용하여 운영체제 따라 컴파일을 할 수 없는지요..????

델파이 버전에 따라 컴파일은 가능 한데.... 운영체제에 따라 어떻게 해야 하는지....

아래내용은 네트워크 그룹알아내기 입니다.(팁)에 있습니다. 참고 하세요

그럼 부탁드립니다.
------------------------------------------------------------
안녕하세요. 최용일입니다.

윈도우의 WorkGroup이름을 알아내는 팁입니다.

Windows 9x, Me: 레지스트리에서 읽어오시면 됩니다.

procedure TForm1.Button1Click(Sender: TObject);
const
    WGKey = '\System\CurrentControlSet\Services\VxD\VNETSUP';
    WGName = 'WorkGroup';
var
    RegFile: TRegistry;
    WorkGroup: string;
begin
    RegFile := TRegistry.Create;
    try
        RegFile.RootKey := HKEY_LOCAL_MACHINE;
        if RegFile.OpenKey(WGKey, True) then
        begin
            WorkGroup := RegFile.ReadString(WGName);
            ShowMessage('WorkGroup: ' + WorkGroup);
        end;
        RegFile.CloseKey;
    finally
      RegFile.Free;
    end;
end;

Windows 2000, NT: NetWork Management Function을 이용하시면 됩니다.

interface

type
    PWKSTA_INFO_102 = ^TWKSTA_INFO_102;
    TWKSTA_INFO_102 = packed record
        wki102_platform_id: DWORD;
        wki102_computername: LPWSTR;
        wki102_langroup: LPWSTR;
        wki102_ver_major: DWORD;
        wki102_ver_minor: DWORD;
        wki102_lanroot: LPWSTR;
        wki102_logged_on_users: DWORD;
    end;

function NetApiBufferFree(Buffer: Pointer): LongWord; stdcall;
function NetWkstaGetInfo(ServerName: LPWSTR; Level: DWORD; var BufPtr: Pointer): DWord; stdcall;

implementation

function NetWkstaGetInfo; external 'Netapi32.dll' name 'NetWkstaGetInfo';
function NetApiBufferFree; external 'Netapi32.dll' name 'NetApiBufferFree';

procedure TForm1.Button1Click(Sender: TObject);
const
    Level: LongWord = 102;
    ServerName: PWideChar = '';
var
    Status: LongWord;
    BufPtr: PWKSTA_INFO_102;
    WorkGroup: string;
begin
    Status := NetWkstaGetInfo(ServerName, Level, Pointer(BufPtr));
    try
      if (Status = ERROR_SUCCESS) then
      begin
          WorkGroup := PWideChar(BufPtr.wki102_langroup);
          ShowMessage('WorkGroup: ' + WorkGroup);
      end;
    finally
      if (BufPtr <> nil) then
          NetApiBufferFree(BufPtr);
    end;
end;


0  COMMENTS