관리되지 않는 타사 라이브러리 (C)가 있습니다. C++/CLI에서 래퍼를 작성하려고하므로 C#에서 라이브러리를 사용할 수 있습니다. 몇 가지 C 예제가 있지만 관리되지 않는 힙과 관리되는 힙을 연결하는 방법을 알 수 없습니다.관리 대상 반환 값으로 관리되지 않는 구조체
라이브러리의 함수 중 하나가 관리되는 래퍼에 보관해야하는 구조체를 반환합니다. 이 구조체는 다른 함수의 매개 변수로 사용됩니다.
작업 C-예 :
library.h
typedef struct FOO_BAR_STRUCT* FOO_BAR;
DLLEXPORT FOO_BAR FooBarCreate();
Example.c는
#include <library.h>
int main(int argc, char* argv[]) {
char* address = "127.0.0.1";
FOO_BAR fb = NULL;
fb = FooBarCreate();
FooBarRegister(fb, address);
}
그래서 내 래퍼에, 나는 예는 무엇을 다시 시도하십시오. 구조체가있는 힙이 문제인지 알았지 만 해결 방법을 찾을 수 없었습니다.
내 C# 프로젝트에서 사용하기 위해 C++/CLI .dll로 컴파일 된 내 C++ 코드.
FooBarComm.h#include <library.h>
ref class FooBarComm
{
public:
FooBarComm(char* address);
~FooBarComm();
private:
FOO_BAR fb;
};
FooBarComm.cpp
#include "FooBarComm.h"
FooBarComm::FooBarComm(char* address)
{
fb = FooBarCreate();
FooBarRegister(fb, address);
}
FooBarComm::~FooBarComm()
{
}
그리고이 실패합니다. FOO_BAR 구조체의 인스턴스를 관리되지 않는 코드에서 관리되는 클래스로 가져온 다음 나중에 함수의 인수로 사용합니다.
편집 :
I fails with a warning LNK4248: unresolved typeref token (0100000D)
error LNK2028: unresolved token (0A00000A) "extern "C" struct FOO_BAR_STRUCT
error LNK2019: unresolved external symbol "extern "C" struct FOO_BAR_STRUCT
나는 문제가 내가 라이브러리와 함께 제공되는 헤더 파일에 FOO_BAR_STRUCT의 정의를 필요가 없다는 것입니다 같아요. 나는이 도서관을 싫어하기 시작했다.
구조체에 대한 참조를 보유하는 관리되지 않는 클래스를 만든 다음이 관리되지 않는 클래스를 관리되는 클래스에서 참조하는 것이 합리적일까요?
error LNK2019: unresolved external symbol _FooBarCreate referenced
편집 :
#include <library.h>
#pragma unmanaged
class FooBarComm {
...
내가 컴파일 오류가
FooBarComm.h : 나는 "정상적인"C++ 클래스로 변경하는 경우
, 나는 다른 컴파일 오류가 2 :
물론 .lib 파일에 대한 누락 된 링크입니다.
왜'fb'보다는'afapd'입니까? –
복사 실수를했습니다! –
질문에있는 코드가 실패한 이유를보기가 어렵습니다. 그리고 물론 당신은 실제로 그것이 어떻게 실패했는지 진술하지 않았습니다. 방금 "이 실패"라고하셨습니다. 세부 사항을 제공하지 않으면 어떻게 도움을받을 수 있습니까? 어떤 방법으로 실패합니까? 정확 해. 공급 세부 사항. –