Передача значения String из неуправляемого кода в управляемый код? - PullRequest
1 голос
/ 01 июня 2011

привет, я возвращаю объект типа LPTSTR из неуправляемого кода, который по существу указывает на строку.я нахожусь в управляемом коде сейчас, и я не могу прочитать его в C #.возвращаемая строка просто "ГГГГГГГГГГГГГГГГГГГГГГГГГ" ..

Вот мой фрагмент управляемого кода.

[DllImport("TableConfig.dll", EntryPoint = "?getTableConfigDlg@@QAEPA_WXZ", CharSet = CharSet.Ansi)]
        static extern String getColumnNamesFormat();

Что-то не так с этим ???Как получить значимые данные из строки, возвращаемой из неуправляемого кода?

Спасибо

Собственный код: -

for(int i=0; i<numCols; ++i)
{
    const bet_TableConfigColumn *col_p = tc_p->getColumn(i);
    const char* colName = tc_p->getKeyName(i);
    const char* colFormat = col_p->getFormat();
    str+=",";
    str+=colName;
    cout << "Col Name" << colName << "Format: " << colFormat;

} // end of for(i)
         LPTSTR pString=str.GetBuffer(0);
            str.ReleaseBuffer();
      return pString;

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Здесь выстрел в темноте, но возвращает ли ваша нативная функция объект, выделенный в стеке? Если это так, вы не можете этого сделать.

Как только вы решите эту проблему, вы можете начать думать о том, как вы собираетесь утилизировать память после того, как она больше не будет использоваться, или у вас будет утечка памяти на руках.

0 голосов
/ 01 июня 2011

Управляется:

DllImport("TableConfig.dll", EntryPoint = "?getTableConfigDlg@@QAEPA_WXZ")]
static extern void getColumnNamesFormat( StringBuilder tableNames );

StringBuilder result = new StringBuilder( 255 );
getColumnNamesFormat( result );

Собственный:

изменить сигнатуру метода для возврата void, взять LPTSTR для управляемого буфера.

_tcscpy(managedBuffer, str);
...