चूंकि InnoSetup
पॉइंटर्स का समर्थन नहीं करता है तो आपको GetVolumeInformation
फ़ंक्शन के कॉल के लिए बाहरी लाइब्रेरी बनाना होगा। निम्नलिखित कोड नमूने डेल्फी और इनोसेटअप के सभी संयोजनों के लिए काम करना चाहिए (यूनिकोड समर्थन बिंदु से)।
यहाँ डेल्फी पुस्तकालय कोड है:
library VolumeInformation;
uses
Types, Classes, SysUtils, Windows;
var
SerialNumber: AnsiString;
function GetVolumeSerial(Drive: PAnsiChar): PAnsiChar; stdcall;
var
FileSystemFlags: DWORD;
VolumeSerialNumber: DWORD;
MaximumComponentLength: DWORD;
begin
SerialNumber := '';
GetVolumeInformationA(Drive, nil, 0, @VolumeSerialNumber,
MaximumComponentLength, FileSystemFlags, nil, 0);
SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) + ' - ' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Result := PAnsiChar(SerialNumber);
end;
exports
GetVolumeSerial;
end.
और यहाँ InnoSetup कोड है:
[Files]
Source: "VolumeInformation.dll"; Flags: dontcopy
[Code]
function GetVolumeSerial(Drive: PAnsiChar): PAnsiChar;
external '[email protected]:VolumeInformation.dll stdcall setuponly';
procedure ButtonOnClick(Sender: TObject);
var
S: string;
begin
S := GetVolumeSerial('c:\');
MsgBox(S, mbInformation, mb_Ok);
end;
आपको बार-बार धन्यवाद। बेवकूफ होने के लिए मुझे माफ़ कर दो, लेकिन मैं इसकी व्याख्या कैसे करूं? उदाहरण के लिए, मेरे सी ड्राइव को कमांड प्रॉम्प्ट पर 44 9 डी -0 सी 30 के रूप में लेबल किया गया है, लेकिन जब मैं आपका इनो कोड चलाता हूं तो msgstr "17565-3120 दिखाता है। मुझे पता है कि मैं सही रास्ते पर हूं, लेकिन मैं इनो में कार्यों को आयात करने के लिए नया हूं! आपकी मदद के लिए बहुत बहुत धन्यवाद! हेक्स दशमलव में – user1208402
17565-3120 44 9 डी -0 सी 30 है। मेरा संपादन देखें। – kobik
मैंने कई लोगों को ठोस सलाह दी है। मैं नया ढेर हूं, तो मैं उन्हें उनके योगदान के लिए क्रेडिट कैसे दे सकता हूं? – user1208402