none
如何在主程式與DLL之間傳遞具有相同結構的struct ? RRS feed

  • 問題

  • 環境: Visual Stidio 2008
    語言: C# (VB.Net的語法亦可)

    主程式與DLL均是C#所寫,而非常見的C++ to C# P/Invoke
    主程式與DLL內各有 一個構造完全相同 的結構mystruct,並有給定 StructLayout = Sequential

    基本上是在主程式裡面用到mystruct,並用 List <mystruct> 作集合,
    並且會將 List <mystruct> 以參照(ref)的方式丟給 DLL,希望DLL改變其中的值,
    但丟過去會出現無法轉換的錯誤,既使不用 List包裝,直接傳遞 mystruct 變數給DLL也是同樣的錯誤。

    請問有沒有能讓主程式與DLL可以分別獨立開發、且不需要使用第二個DLL來宣告mystruct的解決辦法呢?
    2010年2月4日 下午 03:08

解答

  • 不能轉換是正常的
    就算struct的名稱一樣...namespace也不一樣
    complier是不可能把這視為相同的..

    你需要一個中介的形態來做
    比方說先把struct serialize 回xml格式
    傳入DLL後再回復

    或者是...把struct 單獨宣告在另一個DLL中
    再分別讓主程式和原來的DLL引用
    亦可解決你分別獨立開發的需要
    2010年2月5日 上午 01:18

所有回覆

  • 你在主程式中不用再建一個結構, 直接引用DLL的結構不就好了 ?
    就像我們在使用類別一樣, 你總不會在主程式中又建一個一模一樣的類別.

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月4日 下午 04:06
    版主
  • 不能轉換是正常的
    就算struct的名稱一樣...namespace也不一樣
    complier是不可能把這視為相同的..

    你需要一個中介的形態來做
    比方說先把struct serialize 回xml格式
    傳入DLL後再回復

    或者是...把struct 單獨宣告在另一個DLL中
    再分別讓主程式和原來的DLL引用
    亦可解決你分別獨立開發的需要
    2010年2月5日 上午 01:18
  • 感謝兩位,
    我以為可以像C那樣,把來源結構指標(結構記憶體起點)與長度傳過去,因為有宣告Sequential,而資料將依序填滿目標結構。
    2010年2月6日 上午 09:24
  • 直接是不能做,不過還是可以透過封裝遞送做記憶體拷貝。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年2月7日 上午 09:14