将字符串值从非托管代码传递到托管代码



hi我从非托管代码返回一个LPTSTR类型的对象,该对象本质上指向一个字符串。我现在在托管代码中,无法在C#中读取它。返回的字符串只是"YYYYYYYYYYYYYYYYYYYYYYY"。。

这是我的托管代码片段。

[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;

托管:

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);

这是一个未知数,但您的本机函数是否返回了堆栈上分配的对象?如果是这样,你就不能那样做。

一旦你解决了这个问题,你就可以开始考虑在内存不再有用后如何处理它,或者你的手上会有内存泄漏。

相关内容

  • 没有找到相关文章

最新更新