2012-02-07 1 views
0

Так что я получаю ошибки компиляции, что я пытаюсь сделать, это использовать GetVolumeInformation для сериализации диска, который будет уникальным для каждого человека. Любая помощь будет принята с благодарностью.Ошибка GetVolumeInformation

Вот мой код:

#include "stdafx.h" 
#include "Head.h" 

using namespace System; 
using namespace System::Collections::Generic; 
using namespace System::ComponentModel; 
using namespace System::Data; 
using namespace System::Drawing; 
using namespace System::Text; 
using namespace System::Net; 
using namespace System::Net::Sockets; 
using namespace System::Windows::Forms; 
using namespace System::IO; 
using namespace System::Security::Cryptography; 
using namespace System::Security::Principal; 

namespace SE 
{ 

    String ^Base::GetSerial(String ^strDriveLetter) 
    { 
     UInt32 serNum = 0; 
     UInt32 maxCompLen = 0; 
     StringBuilder ^VolLabel = gcnew StringBuilder(256); // Label 
     UInt32 VolFlags = UInt32(); 
     StringBuilder ^FSName = gcnew StringBuilder(256); // File System Name 
     strDriveLetter += ":\\"; // fix up the passed-in drive letter for the API call 
     bool Ret = GetVolumeInformation(strDriveLetter, VolLabel, safe_cast<UInt32>(VolLabel->Capacity), serNum, maxCompLen, VolFlags, FSName, safe_cast<UInt32>(FSName->Capacity)); 
     return Convert::ToString(serNum); 
    } 
} 

Тогда вот мой Head.h:

#pragma once 

using namespace System; 
using namespace System::Collections::Generic; 
using namespace System::ComponentModel; 
using namespace System::Data; 
using namespace System::Drawing; 
using namespace System::Text; 
using namespace System::Net; 
using namespace System::Net::Sockets; 
using namespace System::Windows::Forms; 
using namespace System::IO; 
using namespace System::Security::Cryptography; 
using namespace System::Security::Principal; 

namespace SE 
{ 
    private ref class Base 
    { 
    private: 
     static bool GetVolumeInformation(String ^PathName, StringBuilder ^VolumeNameBuffer, UInt32 VolumeNameSize, UInt32 %VolumeSerialNumber, UInt32 %MaximumComponentLength, UInt32 %FileSystemFlags, StringBuilder ^FileSystemNameBuffer, UInt32 FileSystemNameSize); 
    }; 
} 

Однако, когда я компилирую я получаю:

error LNK2022: metadata operation failed (80131187) : Inconsistent method declarations in duplicated types (types: SE.Base; methods: GetVolumeInformationA): (0x06000008). 

У меня есть что-то не так? Благодаря

+1

Файл Head.h вызывает это, одно и то же объявление класса включается в несколько единиц перевода, а компоновщик находит несоответствие между ними. Начните с удаления * private *, это неверно. –

ответ

0

Я не уверен, но я думаю, что проблема может быть потому, что функция GetVolumeInformation является статической функцией, так что вы должны назвать его как

Base::GetVolumeInformation 

внутри функции строки^Base :: GetSerial. Попробуйте это и посмотрите, работает ли оно.

Смежные вопросы