[英]Returning struct with const char* property
在此包裝方法中,我返回DN_OPstruct
,它具有兩個const char*
屬性: TargetNode_Identifier
和Name
。 對於p/invoke
,我必須使用const char*
-類型, std::string
不起作用:
DN_OPstruct getDnOperationIntern(const char* charGuid){
DN_OPstruct op;
UA_OPstruct _op;
_op = GetOPData(charGuid);
op.direction = _op.direction;
op.Name = _op.Name.toUtf8();
op.TargetNode_Identifier = _op.TargetNode_Identifier.toUtf8();
op.TargetNode_NamespaceIndex = _op.TargetNode_NamespaceIndex;
op.Type_of_OP = _op.Type_of_OP;
return op ;
}
如我所讀,您必須strcpy
const char*
s。 沒有這種幫助,屬性的指針將失去其引用,並且我得到錯誤的屬性。 strcpy的示例:
strcpy(new char[output.size()], output.c_str());
如何在我的方法中實現呢?
您不應該在方法中實現它-相反,您應該在單獨的函數中實現它,並在需要復制字符串的所有地方使用它:
char *copyCString(const string& s) {
char *res = new char[s.size()+1]; // Add 1 for null terminator
strcpy(res, s.c_str());
return res;
}
現在,您可以根據需要使用此功能制作副本:
op.Name = copyCString(_op.Name);
op.TargetNode_Identifier = copyCString(_op.TargetNode_Identifier);
您也可以從const char*
開始:
char *copyString(const char* s) {
char *res = new char[strlen(s)+1]; // Add 1 for null terminator
strcpy(res, s);
return res;
}
現在,您可以這樣稱呼它:
op.Name = copyString(_op.Name.toUtf8());
op.TargetNode_Identifier = copyString(_op.TargetNode_Identifier.toUtf8());
當然,您有責任在完成后刪除副本:
delete[] op.Name;
delete[] op.TargetNode_Identifier;
同樣,為此定義一個函數也是一個好主意:
void freeCopiedString(char *s) {
delete[] s;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.