在之前的帖子Passing pointer from managed C++/CLI to ActiveX C++ component我問過將數組(無論是託管數組還是非託管數組)傳遞給在本機C++中創建的activeX組件的正確方法。 該ActiveX方法具有以下特徵:將數組從託管代碼傳遞到非託管C++ ActiveX組件
short Component::CopyToBuffer(short FAR* ptr) {}
時,ActiveX導入在C中使用++/CLI
在C#導入時方法簽名被顯示爲
short Component::CopyToBuffer(short% ptr) {}
它顯示爲
short Component::CopyToBuffer(ref short ptr) {}
但是,我沒有能夠pa正確地連接陣列。
無論是本地陣列:short* shortsArray = new short[500];
既不是管理的陣列:array<short>^ shortsArray = gcnew array<short>(500);
用戶ildjarn和漢斯帕桑特建議我需要編輯互操作程序集文件導出的方法簽名更改爲類似組件:: (int16 [] ptr),我做了併成功編譯了該項目,但遇到了其他類型的問題(類型不匹配或其他)。
所以,現在我做了再現problemnSolution一個示例項目
該解決方案包含:
- 一種用一個方法CopyToBuffer ActiveX組件項目SomeCompCtl.h
- 測試項目中找到在C++/CLI中。帶有添加了activeX的單一窗體,並且按鈕使用給定值的數組調用該方法。
- 在C#中的另一個測試項目,做同樣的事情
要運行項目: - 簡單地編譯SomeComp產生Somecomp.ocx其中包含ActiveX。 - regsrv32的ActiveX控件
請注意,我沒有訪問ActiveX代碼(我有權訪問一個版本的代碼,但我不能認爲開發人員會繼續向我提供代碼的更新版本),所以任何解決方案都不應該依賴於更改ActiveX接口或代碼。我通常只有帶有tlb文件的ocx文件。
我真的希望你在實際的代碼中拼寫出'Component'而不是'Compnenet'。 :) – 2011-06-02 16:56:46
@Billy:上週我在工作中修復了一系列'resluts' - >'results'錯別字。美好時光。 – ildjarn 2011-06-02 19:26:41