먼저 C# 프로그래머이므로 C++에 대한 실무 지식이 상당히 제한적입니다. 나는 대학에서 그것을 다시 가져 갔지만 10 년 만에 그것을 건드리지 않았기 때문에 이것이 비교적 간단한 것이라면 용서해주십시오.C++에서 두 char *을 연결하는 함수
libwpd 라이브러리를 구현하는 C#에서 사용할 수있는 DLL을 만들려고합니다.
P/Invoke를 통해 액세스 할 수있는 두 가지 기능을 내보내는 DLL을 만들었습니다. 첫 번째는 상수 (Visual Studio에서 샘플로 생성), 두 번째 문자열을 반환합니다.
함수에서 상수 문자열을 반환하면 C#으로 전달되고 반대쪽에서 읽을 수 있으므로 데이터가 다시 전달됩니다.
내가 겪고있는 문제는 libwpd입니다. 필자는 TextDocumentGenerator.cpp 파일을 수정하여 나중에 * 액세스 할 수 있도록 사용하는 printf 대신 char *에 정보를 추가해야했습니다.
헤더 파일의 public 섹션에 변수 정의를 추가하여 호출 코드에서 읽을 수 있도록했습니다.
이제 libwpd에서 주어진 char *를 외부 char *에 추가 할 수있는 함수를 작성하려고합니다.
char* addString(const char* addThis, char* toThis)
{
char* copier = (char*)malloc(strlen(toThis) + 1 + 1);
strcpy(copier, toThis);
strcpy(copier, "1");
toThis = (char*)malloc(strlen(copier) + 1);
strcpy(toThis, copier);
return copier;
}
을하지만 다시 정보를 전달할 때, 나는 빈 문자열을 얻을 :
나는이 마련했습니다.
내가
totalFile = addString("\n", totalFile);
를 호출하여 함수를 호출 (나는 그것이 기술적으로 반복 문자열에 "1"을 추가해야 실현하지만, 심지어 일을 아니에요)
난에 대한 strcat와 할 수있는 strcpy를 변경하는 경우 복사기 라인, 그건 자물쇠.
나는 C++로 프로그램을 만드는 법을 모른다. 그래서 나는 무엇이 일어나고 있는지를보기 위해 함수를 단계적으로 검토 할 수있다.
도움을 주시면 감사하겠습니다.
'strcpy (복사기, toThis); strcpy (복사기, "1");'- 두 번째'strcpy'는 첫 번째 결과를 덮어 씁니다. –
C++에서'malloc'을 사용하고 있다면, 거의 항상 잘못된 것을하고 있음을 의미합니다. C++에서'new'를 사용하는 자신을 발견하면 여전히 잘못된 것을하고 있다는 뜻입니다. 'new '가 필요한 공통 시나리오의 많은 부분이 표준 템플릿 라이브러리에 이미 제공되어 있습니다. – Brian
@Trevor 친숙한 팁 : C++ 프로젝트를 C++/CLI로 컴파일하고 프로젝트에서 네이티브 코드 용 관리되는 래퍼를 만드는 것이 좋습니다. 그런 식으로, 그것은 그것과 인터페이스를 훨씬 청소기입니다. 평소와 같이 참조를 추가하기 만하면 래퍼의 관리 인스턴스를 만들 수 있습니다.이 인스턴스에는 기본 클래스에 대한 관리되지 않는 포인터가 들어 있습니다. – Max