2012-01-10 21 views
1

VB SDKのAPIを使用して仮想ボックスにVMを作成する必要があります。私はマシンを作成することができましたが、コントローラを作成して、VM用のデバイスを追加することは、私を大きく困らせています。私を助けてもらえますか?私が使用しているコードを与えましたVB SDKでバーチャルボックスにVMを作成

CoInitialize(NULL); 

IMachine *machine = NULL; 
IVirtualBox *virtualBox = NULL; 
BSTR guid = NULL; 
HRESULT hr; 

/* Instantiate the VirtualBox root object. */ 
hr = CoCreateInstance(CLSID_VirtualBox, /* the VirtualBox base object */ 
    NULL, /* no aggregation */ 
    CLSCTX_LOCAL_SERVER, /* the object lives in a server process on this machine */ 
    IID_IVirtualBox, /* IID of the interface */ 
    (void**)&virtualBox); 
BSTR strMachineName = ::SysAllocString(L"SampleMachine"); 
IGuestOSType* os = NULL; 
BSTR type = ::SysAllocString(L"unknown"); 
hr = virtualBox->GetGuestOSType(type, &os); 
os->get_Id(&guid); 
os->Release(); 
BSTR null = ::SysAllocString(L"00000000-0000-0000-0000-000000000000"); 
hr = virtualBox->CreateMachine(NULL, strMachineName, guid, null, TRUE, &machine); 
::SysFreeString(null); 

if (SUCCEEDED(hr)) 
{ 
    IMedium* medium = NULL; 
    ISession *session = NULL; 
    IConsole *console = NULL; 
    IProgress *progress = NULL; 
    BSTR sessiontype = SysAllocString(L"gui"); 
    BSTR bstrPath = SysAllocString(L"I:\\VHD\\Local_disk_(C).vhd"); 
    hr = machine->SaveSettings(); 
    hr = virtualBox->RegisterMachine(machine); 
    machine->Release(); 
    hr = virtualBox->FindMachine(strMachineName, &machine); 
    hr = virtualBox->OpenMedium(bstrPath, DeviceType_HardDisk, AccessMode_ReadWrite, 
     TRUE, &medium); 
    /* Create the session object. */ 
    hr = CoCreateInstance(CLSID_Session, /* the VirtualBox base object */ 
     NULL, /* no aggregation */ 
     CLSCTX_INPROC_SERVER, /* the object lives in a server process on this machine */ 
     IID_ISession, /* IID of the interface */ 
     (void**)&session); 
    hr = machine->LockMachine(session, LockType_Write); 
    IStorageController* cont = NULL; 
    BSTR loc = ::SysAllocString(L"BusLogic"); 
    hr = machine->AddStorageController(loc, StorageBus_SCSI, &cont); 
    hr = machine->AttachDevice(loc, 0, 0, DeviceType_HardDisk, medium); 
    /* Start a VM session using the delivered VBox GUI. */ 
    hr = machine->LaunchVMProcess(session, sessiontype, 
     NULL, &progress); 
    /* Wait until VM is running. */ 
    hr = progress->WaitForCompletion (-1); 
    /* Get console object. */ 
    session->get_Console(&console); 
    /* Bring console window to front. */ 
    machine->ShowConsoleWindow(0); 

コードはhr = machine->AddStorageController(loc, StorageBus_SCSI, &cont);で失敗します。私が間違っていることは何ですか?

+0

次へmutablemachine

hr = machine->LockMachine(session, LockType_Write); IStorageController* cont = NULL; BSTR loc = ::SysAllocString(L"BusLogic"); hr = machine->AddStorageController(loc, StorageBus_SCSI, &cont); 

変更の追加を行うことができますか? –

+0

私はあなたを助けることはできませんが、私はプログラマティカルにローカルVMを生成するのはすばらしいことだと思っています;-)プログラマーの究極のハンマー;)幸運! – Offirmo

+0

こんにちは@RowlandShaw、私が得る戻り値は-2135228414です – user1071321

答えて

0

あなたは、変更可能なマシンにAddStorageControllerを追加session.machineからマシンオブジェクトを取得し、HRESULTが返され何

hr = machine->LockMachine(session, LockType_Write); 
    Imachine *mutableMachine = NULL; 
    hr= session->get_Machine(&mutableMachine); 
    IStorageController* cont = NULL; 
    BSTR loc = ::SysAllocString(L"BusLogic"); 
    hr = mutableMachine ->AddStorageController(loc, StorageBus_SCSI, &cont); 
関連する問題