2010-01-27 3 views
2

В C++ У меня есть переменная char [256], которая заполняется вызовом внешней DLL, которая заполняет ее данными. Оттуда я хотел бы добавить char [] в качестве элемента ComboBox.Преобразование char [] в System :: Object

char name[256]; 
name[0] = "76"; 
comboBox1->Items->Add(name); 

Это создает ошибку сборки, поскольку char [] не является типом System :: Object. Любые идеи по преобразованию char [] в то, что я могу добавить в качестве элемента в элемент управления ComboBox? Преобразование в строку было бы прекрасно, но я не совсем уверен, как это сделать. Плюс, если я попытаюсь создать такую ​​переменную, как:

string strName; 

также создает ошибку при отсутствии ';' перед идентификатором 'strName'. Я новичок в C++, и до сих пор мой мозг обернулся вокруг, поэтому спасибо за любую помощь!

EDIT Полный код по запросу:

#pragma once 

имен FMODMultipleSoundcardWindowed {

#include <string> 
#include "inc/fmod.h" 
#include "inc/fmod_errors.h" 

using namespace System; 
using namespace System::ComponentModel; 
using namespace System::Collections; 
using namespace System::Windows::Forms; 
using namespace System::Data; 
using namespace System::Drawing; 
using namespace std; 


FMOD_SYSTEM  *systemA, *systemB; 
FMOD_SOUND  *soundA, *soundB; 
FMOD_CHANNEL *channelA = 0, *channelB = 0; 
FMOD_DSP  *dspNormalizerA, *dspNormalizerB; 
FMOD_DSP  *dspCompressorA, *dspCompressorB; 
FMOD_DSP  *dspEqualizerA[10], *dspEqualizerB[10]; 
FMOD_DSP  *dspVSTVUA, *dspVSTVUB; 
FMOD_RESULT  result; 
unsigned int dspVSTVUHandleA, dspVSTVUHandleB; 
unsigned int version; 
int    numdrivers, count; 


public ref class Form1 : public System::Windows::Forms::Form 
{ 
public: 
    Form1(void) 
    { 
     InitializeComponent(); 

     result = FMOD_System_Create(&systemA); 
     ERRCHECK(result); 

     result = FMOD_System_GetVersion(systemA, &version); 
     ERRCHECK(result); 

     if (version < FMOD_VERSION) 
     { 
      MessageBox::Show("You are using an old version of FMOD!"); 
     } 

     result = FMOD_System_GetNumDrivers(systemA, &numdrivers); 
     ERRCHECK(result); 

     for (count = 0; count < numdrivers; count++) 
     { 
      char name[256]; 

      result = FMOD_System_GetDriverInfo(systemA, count, name, 256, 0); 
      ERRCHECK(result); 

      m_objPrimaryAudioDeviceComboBox->Items->Add(name[0]); 
     } 
    } 

    void ERRCHECK(FMOD_RESULT result) 
    { 
     if (result != FMOD_OK) 
     { 
      MessageBox::Show("FMOD Error!"); 
      this->Close(); 
     } 
    } 

protected: 
    /// <summary> 
    /// Clean up any resources being used. 
    /// </summary> 
    ~Form1() 
    { 
     if (components) 
     { 
      delete components; 
     } 
    } 
private: System::Windows::Forms::ComboBox^ m_objPrimaryAudioDeviceComboBox; 
protected: 
private: System::Windows::Forms::ComboBox^ m_objSecondaryAudioDeviceComboBox; 

private: 
    System::ComponentModel::Container ^components; 

Прагма область Windows Form Designer сгенерированный код

void InitializeComponent(void) 
    { 
     this->m_objPrimaryAudioDeviceComboBox = (gcnew System::Windows::Forms::ComboBox()); 
     this->m_objSecondaryAudioDeviceComboBox = (gcnew System::Windows::Forms::ComboBox()); 
     this->SuspendLayout(); 
     // 
     // m_objPrimaryAudioDeviceComboBox 
     // 
     this->m_objPrimaryAudioDeviceComboBox->FormattingEnabled = true; 
     this->m_objPrimaryAudioDeviceComboBox->Location = System::Drawing::Point(12, 12); 
     this->m_objPrimaryAudioDeviceComboBox->Name = L"m_objPrimaryAudioDeviceComboBox"; 
     this->m_objPrimaryAudioDeviceComboBox->Size = System::Drawing::Size(254, 21); 
     this->m_objPrimaryAudioDeviceComboBox->TabIndex = 0; 
     // 
     // m_objSecondaryAudioDeviceComboBox 
     // 
     this->m_objSecondaryAudioDeviceComboBox->FormattingEnabled = true; 
     this->m_objSecondaryAudioDeviceComboBox->Location = System::Drawing::Point(12, 54); 
     this->m_objSecondaryAudioDeviceComboBox->Name = L"m_objSecondaryAudioDeviceComboBox"; 
     this->m_objSecondaryAudioDeviceComboBox->Size = System::Drawing::Size(254, 21); 
     this->m_objSecondaryAudioDeviceComboBox->TabIndex = 1; 
     // 
     // Form1 
     // 
     this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); 
     this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; 
     this->ClientSize = System::Drawing::Size(440, 426); 
     this->Controls->Add(this->m_objSecondaryAudioDeviceComboBox); 
     this->Controls->Add(this->m_objPrimaryAudioDeviceComboBox); 
     this->Name = L"Form1"; 
     this->Text = L"FMOD Multiple Soundcard with VST"; 
     this->ResumeLayout(false); 

    } 

Прагма ан dregion

}; 

}

+0

Приложение к моему ответу и комментариям ниже: поместите 'include ' строка вне 'пространства имен FMODMultipleSoundcardWindowed {'. Else, 'std' заканчивается как' FMODMultipleSoundcardWindowed :: std'. –

+0

Это дает мне доступ к строковому объекту, как было запланировано, и это здорово.Но моя оригинальная проблема заключается в том, что я не могу добавить строку std: как элемент ComboBox, потому что 'не может преобразовать параметр 1 из' std :: string 'в' System :: Object^' – Jeff

+0

Отредактировал свой ответ. –

ответ

1
string strName; 

Во-первых, вам нужно #include <string> для того, чтобы использовать std::string. Во-вторых, вы должны добавить using namespace std; на свое устройство, чтобы обратиться к std::string как string. Кроме того, вместо этого используйте равную std::string strName. Это вопрос вкуса. Использование полной формы позволяет избежать загрязнения вашего пространства имен всеми идентификаторами от std.

К основному вопросу:

gcnew String(text.c_str()); 

Это должно сделать преобразование. text - ваш экземпляр std::string, и результат выражения - это строковый объект, который необходимо передать в Add.

+0

Я работаю в VS2005 с моим проектом на C++. Добавление любой ссылки на std возвращает, что 'std': не является именем класса или пространства имен. Что-то мне здесь не хватает? – Jeff

+0

Он должен быть доступен, если вы '#include ' перед 'использованием пространства имен std;'. –

+0

Когда я пробую это, сборка выдает 100+ ошибок из файла cstdio и cstdlib. – Jeff

0

Попробуйте string strName(name); (в предположении, что вы уже имеете и включает в себя пространство имен прямо ...)

UPDATE: Похоже, что это System::String вам нужно использовать, а не строку STL ,

+0

Отмечено. Но я думаю, что мне не хватает некоторых включений/пространств имен. Опять же - я все еще учусь и разбираюсь в этом. C++ и струны ударяют мой разум, так как в VB и C# всегда было так легко работать со всем, что я хотел. – Jeff

+0

Мои извинения :) Как показывают другие ответы, вы должны уметь «#include », а затем использовать 'using namespace std;' или изменить свой вызов на использование 'std :: string' вместо просто' string'. Проверьте это: http://www.devarticles.com/c/a/Cplusplus/The-STL-String-Class/ – acron

0

ваша вторая проблема звучит как отсутствует включаемые для класса строки, так что просто добавьте #include <string> в верхней части файла, вы можете также необходимо добавить using namespace std; или использовать «зЬй :: строка» в зависимости от вашей системы

+0

Когда я пробую это, сборка выдает 100+ ошибок из файла cstdio и cstdlib. Я что-то упускаю? BTW - работает на VS2005 C++. Спасибо за вашу помощь. – Jeff

+0

может быть потому, что я забыл полуточку за «using namespace std»: |, исправлено выше – Necrolis

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