기억에 대한 불신으로 인한 백업차원에서 올려둡니다.
COM 객체가 있습니다. 뭐 VB로 짠거 같은데, 그런건 중요하지 않고 [중요할거 같군요.]
이 객체에 메소드가 있습니다. 편의상 Get 이라고 칭합니다.
이 COM 객체를 닷넷에서 쓰려고 TlbImp 유틸리티를 사용해서 닷넷 프록시 객체를 만듭니다.
Get 메소드의 인자들은 전부 ref object, out object 군요.
금액도 ref object 형식으로 받게 되어있습니다.
object amount = "10";
someObject.Get(..., ref amount, ...);
Console.WriteLine(amount);
someObject.Get(..., ref amount, ...);
Console.WriteLine(amount);
처음엔 10원입니다. 그러나 호출 이후에는 쓰레기 값이 들어갑니다.
한참을 고민하다가, 이렇게 해봤습니다.
int amount = 10;
object objAmount = amount;
someObject.Get(..., ref objAmount, ...);
amount = (int) objAmount;
Console.WriteLine(amount);
object objAmount = amount;
someObject.Get(..., ref objAmount, ...);
amount = (int) objAmount;
Console.WriteLine(amount);
잘 됩니다. =D
RCW를 지나가면서 마샬링이 되는 과정에서 string으로 마샬링이 되는 것과 int로 마샬링이 되는걸 생각하지 못하고, object 라는 것에 맹점을 두었던게 잘못이었습니다.
삽질이었습니다. ㅠㅠ
제루 Season 2, @Tokyo