이미지를 검색하기 위해 나는 this tutorial을 사용했습니다. 관리되지 않는 코드에서 C# 관리되는 라이브러리를 사용하는 방법을 철저히 설명합니다.
내가 수행 한 프로세스는 here으로 기록되어 있습니다.
여기 개요
- 는
- 네이티브 클래스 및/또는 함수를 만들 DLL은 C#에 대한 참조를 추가 C++/CLI 프로젝트 (비주얼 스튜디오의 새로운 프로젝트 대화 상자에서 CLR 클래스 라이브러리)을 만들 수 있다는 네이티브 월드에 필요한 C# dll 기능을 에 노출합니다.
- 이 기본 프로젝트 (들)
소개에 링커 입력으로 C++/CLI 프로젝트에 의해 생성 된 lib 디렉토리를 추가 (__declspec (dllexport) 또는 .DEF 파일) 통상적 인 수단을 사용하여 내보내기 이미지 정보는 바이트 배열이라고 할 수 있습니다. GCHandle을 사용하여 관리 코드에 고정해야합니다. 다음은이 개념을 설명하기 위해 몇 가지 코드 (면책 조항은,이 답변은 original msdn forum post 다른 저자에 의해 제공되었다)입니다 :
#include <unordered_map>
using namespace System;
using namespace System::Runtime::InteropServices;
std::unordered_map<void *, void *> dataHandles;
void *getData() {
array<Byte>^ arr = gcnew array<Byte>(2);
arr[0] = 'C';
arr[1] = '#';
GCHandle handle = GCHandle::Alloc(arr, GCHandleType::Pinned);
void *data = (void *)handle.AddrOfPinnedObject();
dataHandles.insert(std::make_pair(data, (void *)GCHandle::ToIntPtr(handle)));
return data;
}
void releaseData(void *data) {
auto i = dataHandles.find(data);
if (i != dataHandles.end())
GCHandle::FromIntPtr((IntPtr)i->second).Free();
}
#pragma unmanaged
void native() {
char *data = (char *)getData();
for (int i = 0; i < 2; i++)
printf("%c ", data[i]);
releaseData(data);
}
#pragma managed
int main(array<System::String ^> ^args) {
native();
return 0;
}
나는이 질문을 수정하기 위해 노력하고있어 특정 Bitmap
here
변환
unsigned char *
에 대해 자세히 알아보기 그것이 C# 또는 .NET에 대해 아무 것도 몰라서 그것을 묻는 순간에 받아 들여지도록하십시오. 나는 질문의 질을 향상시키는 것을 어렵게 생각하고있다. 전체 질문에서 열악한 연구 결과가 표시되면 삭제해야합니까? –