2010-07-02 3 views
1

안녕하세요, 저는 C++로 DLL을 만들고 .NET 응용 프로그램 (C# 및 VB.NET)에서 사용할 수 있기를 바랍니다. 나는 팁 인터넷을 수색하고 내가 지금까지 발견 한 것은 시사했습니다 : .NET에서 사용할 C++ DLL을 만드는 팁

  • 내 C++ 통근 C 등의 기능을 선언하고 매개 변수에 대한 기본 C 유형 사용 __stdcall
  • 을 사용하고 STL 대신 형태를 돌려주는 서명 숯불 바이트 타입 정의 가정 참조

대신 수정해야 입력 파라미터에 대한 포인터를 사용하여 (표준 : * 대신 문자열의 문자 등) 용기

  • ;

    압축 기능입니다. 입력 데이터 (바이트 *로 전달됨), 입력 데이터의 크기 (int로 전달됨), 압축 된 크기 (int *로 전달됨)를 저장하는 변수에 대한 포인터 및 이 오류 메시지는 필요한 경우 저장 될 수 있습니다 (char *로 전달됨). 함수 malloc은 출력 버퍼를 가지고 출력을 기록하고 바이트 *를 반환하며, 호출 코드는 버퍼 사용을 끝내면 버퍼를 비울 것으로 예상됩니다. 오류가 발생하면 오류 메시지가 strcpy로 오류 문자열에 기록되고 NULL 포인터가 반환됩니다.

    내 현재의 설정이 정상입니까, 아니면 .NET에서 호출 할 수 있도록 다른 수정을해야합니까?

  • 답변

    2

    관리 코드는 메모리를 확보 할 수 없으며 CRT에 내장 된 할당 자에 액세스 할 수 없습니다. 대신 CoTaskMemAlloc()을 사용하여 버퍼를 할당 할 수 있으며 관리되는 코드는 Marshal.FreeCoTaskMem()을 호출 할 수 있습니다. 버퍼 포인터 인수를 "ref IntPtr"로 선언하거나 함수의 반환 형식을 IntPtr로 선언해야합니다. 따라서 관리 코드에 관리되는 바이트 배열로 변환하는 번거 로움이 있습니다.

    이것은별로 좋지 않습니다. C++/CLI에서 코드를 작성하거나 COM 서버를 작성하면 이러한 문제가 사라집니다.

    +0

    예, C++/CLI가 진행됩니다. –

    관련 문제