일부 이미지 처리가 필요한 프로젝트에서 작업 중입니다. 프로그램의 프론트 엔드는 C#입니다 (사람들이 UI를 만드는 것이 훨씬 더 간단하다고 생각하기 때문에). 그러나 이미지 처리 부분에 많은 CPU 쥬스가 필요하기 때문에이 부분을 C++로 만들고 있습니다.C# 프로젝트 용 C++ DLL 생성 - 함수를 내 보내지 않았습니다.
아이디어는 그것을 C# 프로젝트에 연결하고 DLL에서 함수를 호출하여 이미지 처리 부분을 만들고 C# 환경에서 나중에 데이터를 처리 할 수있게하는 것입니다. 이제 유일한 문제는 DLL을 만들 수 없다는 것입니다. 간단히 말해 컴파일러는 내가 컴파일하는 DLL에 어떤 함수도 넣기를 거부합니다.
프로젝트에 개발 시간 테스트가 필요하기 때문에 C++ 솔루션으로 두 개의 프로젝트를 만들었습니다. 하나는 Dll 및 다른 콘솔 응용 프로그램 용입니다. 콘솔 프로젝트는 모든 파일을 보유하고 있으며 해당 헤더를 DLL 프로젝트 파일에 포함합니다. 나는 컴파일러가 수출로 표시 한 함수를 꺼내서 DLL을 만들어야한다고 생각했습니다. 그럼에도 불구하고 이것은 일어나지 않습니다.
extern "C" __declspec(dllexport) void _stdcall RobotData(BYTE* buf, int** pToNewBackgroundImage, int* pToBackgroundImage, bool InitFlag, ObjectInformation* robot1, ObjectInformation* robot2, ObjectInformation* robot3, ObjectInformation* robot4, ObjectInformation* puck);
extern "C" __declspec(dllexport) CvPoint _stdcall RefPointFinder(IplImage* imgInput, CvRect &imgROI,
CvScalar &refHSVColorLow, CvScalar &refHSVColorHi);
cpp가 파일의 구현에 이어 :
extern "C" __declspec(dllexport) CvPoint _stdcall RefPointFinder(IplImage* imgInput, CvRect &imgROI,&refHSVColorLow, CvScalar &refHSVColorHi) { \\...
return cvPoint((int)(M10/M00) + imgROI.x, (int)(M01/M00) + imgROI.y) ;}
extern "C" __declspec(dllexport) void _stdcall RobotData(BYTE* buf, int** pToNewBackgroundImage, int* pToBackgroundImage, bool InitFlag, ObjectInformation* robot1, ObjectInformation* robot2, ObjectInformation* robot3, ObjectInformation* robot4, ObjectInformation* puck) { \\ ...};
그리고 DLL 프로젝트에 대한 내 주요 파일의 모습을 여기
은 내가 헤더에서 함수를 정의하는 방법입니다 :
#ifdef _MANAGED
#pragma managed(push, off)
#endif
/// <summary> Include files. </summary>
#include "..\ImageProcessingDebug\ImageProcessingTest.h"
#include "..\ImageProcessingDebug\ImageProcessing.h"
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
말할 필요도없이 작동하지 않습니다. DLL 내보내기 뷰어 1.36에서 간략하게 살펴보면 함수가 라이브러리 안에 없다는 것을 알 수 있습니다. 나는 그것을 얻지 않는다. 내가 뭘 잘못하고 있니? alt text http://img401.imageshack.us/img401/9/20100317152758.jpg 측면과 마찬가지로 나는 C++ 객체 (여기서는 C++ DLL 부분)를 벡터와 같이 사용하고 있습니다. 그러나 내부 용으로 만 사용됩니다. 이전 코드 스 니펫에서 볼 수있는 것처럼 두 함수의 헤더에 나타나지 않습니다.
아이디어가 있으십니까? 들으,
베르나
C++ 콘솔 응용 프로그램에서 함수를 호출 할 수 있습니까? 나는 이것을 먼저 시도함으로써 시작할 것입니다. –