아래의 질문은 "dotnetguru("http://www.dotnetguru.co.kr/")에 올린 질문이었습니다. 도움이 되지 않을까 싶어서 제 홈페이지에도 올려 봅니다. ^^
다음은 managed 환경의 샘플 Type입니다.
public class CTest
{
public void CallMethod( string text1, string text2 )
{
if ( text1 == "Test" )
{
MessageBox.Show( "text1 == 'Test'" );
}
if ( text2 == "Test" )
{
MessageBox.Show( "text2 == 'Test'" );
}
}
}
이제 위의 모듈을 컴파일해서 나온 DLL을 tlbexp.exe로 TLB 파일을 생산해 내고.
다음은 unmanaged 환경에서의 VC++ 코딩입니다.
#import "TestLib.tlb" raw_interfaces_only
// CLR 호스트하고.
// Default Domain 로드하고.
// Default Domain에서 타입 로드하고.
pDefultDomain->CreateInstance( "TestLib", "TestLib.CTest", &pHandle );
pHandle->Unwrap( &v );
CComQIPtr<TestLib::_CTest> pLibrary = v.pdispVal;
// 인자 한 개는 SysAllocString으로 할당하고.
BSTR bstrTest = ::SysAllocString( L"Test" );
pLibraray->CallMethod( bstrTest, L"Test" ); // 또 다른 인자 한 개는 그냥 전달.
---------------------------------------------------------
위와 같이 실행하면, 정상적인 경우라면 MessageBox가 2번이 떠야 합니다.
"text1 == 'Test'"
"text2 == 'Test'"
실제 실행결과는, SysAllocString 후에 전달된 인자만이 "Test"와의 비교 시에 True가 나옵니다.
제가 뭔가 알지 못하는 Interop 관련 지식이 있는 걸까요?
(Managed인 경우 .NET 1.1(VS.NET 2003)이고, Unmanaged VC++은 VS.NET 2005에서 한 것입니다. Managed를 .NET 2.0으로는 테스트 안 해봤습니다. 비슷하지 않을까 싶어서.)
Title |
11903 | 정성태 | 5/21/2019 | 24646 | 오류 유형: 540. .NET Core - System.PlatformNotSupportedException: The named version of this synchronization primitive is not supported on this platform. | |
11902 | 정성태 | 5/21/2019 | 21241 | 오류 유형: 539. mstest 실행 시 "The directory name is invalid." 오류 발생 | |
11901 | 정성태 | 5/21/2019 | 24863 | 오류 유형: 538. msbuild 오류 - Could not find a part of the path '%LOCALAPPDATA%\Temp\2\.NETFramework,Version=v4.0.AssemblyAttributes.cs' | |
11900 | 정성태 | 5/18/2019 | 23566 | 오류 유형: 537. "sfc /scannow" 실행 중 시스템이 부팅되는 현상 | |
11899 | 정성태 | 5/17/2019 | 23629 | Linux: 9. Linux에서 윈도우의 OutputDebugString 대신 사용할 수 있는 syslog [1] | |
11898 | 정성태 | 5/16/2019 | 25077 | VC++: 130. C++ string의 c_str과 data 함수의 차이점 [3] | |
11897 | 정성태 | 5/16/2019 | 31129 | 오류 유형: 536. Visual Studio - "Developer Pack"을 설치했는데도 "대상 프레임워크" 목록에 나오지 않는 경우 [2] | |
11896 | 정성태 | 5/15/2019 | 28292 | 개발 환경 구성: 440. C#, C++ - double의 Infinity, NaN 표현 방식 | 1 |
11895 | 정성태 | 5/12/2019 | 25037 | .NET Framework: 832. ML.NET Model Builder - 회귀(Regression), 다중 분류(Multi-class classification) 예제 | 1 |
11894 | 정성태 | 5/10/2019 | 27466 | VS.NET IDE: 135. Visual Studio - ML.NET Model Builder 소개 [5] | |
11893 | 정성태 | 5/10/2019 | 22538 | 오류 유형: 535. C# 6.0 이상의 문법을 컴파일 시 오류가 발생한다면? | |
11892 | 정성태 | 5/10/2019 | 22171 | 웹: 38. HTTP Cookie의 expires 시간 형식(RFC7231) | |
11891 | 정성태 | 5/9/2019 | 25853 | .NET Framework: 831. (번역글) .NET Internals Cookbook Part 12 - Memory structure, attributes, handles | |
11890 | 정성태 | 5/8/2019 | 22413 | 개발 환경 구성: 439. "Visual Studio Enterprise is required to execute the test." 메시지와 관련된 코드 기록 | |
11889 | 정성태 | 5/8/2019 | 21280 | 개발 환경 구성: 438. mstest, QTAgent의 로그 파일 설정 방법 | |
11888 | 정성태 | 5/8/2019 | 40052 | .NET Framework: 830. C# - 비동기 호출을 취소하는 CancellationToken의 간단한 예제 코드 [1] | 1 |
11887 | 정성태 | 5/8/2019 | 26211 | .NET Framework: 829. C# - yield 문을 사용할 수 있는 메서드의 조건 | |
11886 | 정성태 | 5/7/2019 | 22585 | 오류 유형: 534. mstest.exe 실행 시 "Visual Studio Enterprise is required to execute the test." 오류 [2] | |
11885 | 정성태 | 5/7/2019 | 20622 | 오류 유형: 533. mstest.exe 실행 시 "File extension specified '.loadtest' is not a valid test extension." 오류 발생 | |
11884 | 정성태 | 5/5/2019 | 25468 | .NET Framework: 828. C# DLL에서 Win32 C/C++처럼 dllexport 함수를 제공하는 방법 - 두 번째 이야기 | |
11883 | 정성태 | 5/3/2019 | 30587 | .NET Framework: 827. C# - 인터넷 시간 서버로부터 받은 시간을 윈도우에 적용하는 방법 | 1 |
11882 | 정성태 | 5/2/2019 | 27435 | .NET Framework: 826. (번역글) .NET Internals Cookbook Part 11 - Various C# riddles | 1 |
11881 | 정성태 | 4/28/2019 | 27454 | 오류 유형: 532. .NET Core 프로젝트로 마이그레이션 시 "CS0579 Duplicate 'System.Reflection.AssemblyCompanyAttribute' attribute" 오류 발생 | |
11880 | 정성태 | 4/25/2019 | 23361 | 오류 유형: 531. 이벤트 로그 오류 - Task Scheduling Error: m->NextScheduledSPRetry 1547, m->NextScheduledEvent 1547 | |
11879 | 정성태 | 4/24/2019 | 33196 | .NET Framework: 825. (번역글) .NET Internals Cookbook Part 10 - Threads, Tasks, asynchronous code and others | 2 |
11878 | 정성태 | 4/22/2019 | 27056 | .NET Framework: 824. (번역글) .NET Internals Cookbook Part 9 - Finalizers, queues, card tables and other GC stuff | 1 |