CLR 콘솔 응용 프로그램에서 C++/CLI를 사용하여 간단한 DLL을 테스트하고 있습니다. DLL에는 사용하려는 함수가 하나뿐입니다. DLL을 참조하고 프로젝트 속성 페이지에서 Resusing #using Reference를 설정했지만 작성한 함수를 볼 수 없습니다. 나는 어딘가에 접근 수정자를 놓친 것 같지만 확실하지 않다.테스트 응용 프로그램에서 DLL 기능을 볼 수 없습니다.
DLL 코드 헤더 :
// LogDLL.h
#pragma once
#using <mscorlib.dll>
using namespace System;
namespace LogDLL {
public ref class LogFuncs
{
// TODO: Add your methods for this class here.
LogFuncs(){;};
~LogFuncs(){;};
void log_to_file (System::String ^file, bool overwrite, System::String ^text);
};
}
DLL 코드 출처 :
#include "stdafx.h"
#include "LogDLL.h"
using namespace System::Globalization;
void LogDLL::LogFuncs::log_to_file (System::String ^file, bool overwrite, System::String ^text)
{
//Do Stuff
}
그리고 내가 사용 테스트 코드 :
여기 내 코드의 고장입니다#include "stdafx.h"
#using <LogDLL.dll>
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
LogDLL::LogFuncs^ a;
a::LogDLL::LogFuncs:: //<-- Intellisense doesn't show the function from the DLL
return 0;
}
다시 말씀 드리지만, 저는 su가 아닙니다. 내가 뭘 놓치고 있는지. C++/CLI와 함께 작업 한 이래로 잠시였습니다. 그래서 나는 녹슨예요.
업데이트 : 내가 나서서 피터의 조언에 따라 구조체에 클래스를 변경
.
수정 DLL 헤더 코드 : 클래스가 아직도 내가 공개로 지정에도 불구하고 비공개로 기본 왜 무엇 난 아직도 이해가 안
// LogDLL.h
#pragma once
#using <mscorlib.dll>
using namespace System;
namespace LogDLL {
public ref struct LogFuncs
{
// TODO: Add your methods for this class here.
LogFuncs(){;};
~LogFuncs(){;};
void log_to_file (System::String ^file, bool overwrite, System::String ^text);
};
}
. 이것이 왜 그런지 근본적인 이유가 있습니까? 내가 관리되지 않는 C++를 사용했다면 다른 것이겠습니까 ??
고마워 피터, 나는 ref 구조체로 바꿨고 트릭을 만들었습니다. – kingrichard2005
후속 질문에 대해서는 클래스 자체의 "public"은 멤버가 아닌 해당 유형의 표시 여부를 나타냅니다. "ref class LogFuncs"만 있으면 자체 어셈블리 외부에서 액세스 할 수 없습니다. 따라서 원하는 방식으로 다른 어셈블리에서 액세스 할 수있는 멤버는 공용 형식 (InternalsVisibleToAttribute 무시)이어야하며 멤버 자체는 공개되어야합니다. –
혼란을 야기 할 수있는 추가 설명 : C++/CLI는 CLI (Common Language Infrastructure)의 개념에 C++을 그대로 적용하려고 시도했습니다. 따라서 C++/CLI, "ref class"및 "ref struct"에서 CLI 클래스 유형을 선언하는 두 가지 방법이 있습니다. 전자는 C++ 클래스처럼 동작합니다. 멤버에 대한 기본 개인 액세스입니다. 후자는 C++ 구조체처럼 동작합니다. 멤버에 대한 기본 공용 액세스입니다. "value class"와 "value struct"는 CLI 값 유형을 선언하는 것을 제외하고는 마찬가지입니다. –