COM과 .NET의 상호 운용성 삽질

Posted at 2006/04/25 19:57// Posted in dev
하루에 연달아서 두 개의 삽질을 올리려니, 대략 정신이 멍해지는군요.
기억에 대한 불신으로 인한 백업차원에서 올려둡니다.

COM 객체가 있습니다. 뭐 VB로 짠거 같은데, 그런건 중요하지 않고 [중요할거 같군요.]
이 객체에 메소드가 있습니다. 편의상 Get 이라고 칭합니다.
이 COM 객체를 닷넷에서 쓰려고 TlbImp 유틸리티를 사용해서 닷넷 프록시 객체를 만듭니다.
Get 메소드의 인자들은 전부 ref object, out object 군요.
금액도 ref object 형식으로 받게 되어있습니다.

object amount = "10";
someObject.Get(..., ref amount, ...);
Console.WriteLine(amount);

처음엔 10원입니다. 그러나 호출 이후에는 쓰레기 값이 들어갑니다.

한참을 고민하다가, 이렇게 해봤습니다.
int amount = 10;
object objAmount = amount;
someObject.Get(..., ref objAmount, ...);
amount = (int) objAmount;
Console.WriteLine(amount);

잘 됩니다. =D

RCW를 지나가면서 마샬링이 되는 과정에서 string으로 마샬링이 되는 것과 int로 마샬링이 되는걸 생각하지 못하고, object 라는 것에 맹점을 두었던게 잘못이었습니다.
삽질이었습니다. ㅠㅠ
크리에이티브 커먼즈 라이센스
Creative Commons License
2006/04/25 19:57 2006/04/25 19:57
Tag ,

이 글에는 트랙백을 보낼 수 없습니다

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret