Re: [問題] DllImport

看板C_Sharp作者 (hamster)時間15年前 (2009/06/12 11:35), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
固定長度字串需要特別指定: [StructLayout(LayoutKind.Sequential)] public struct TStock { public short m_sStockidx; public byte m_cMarketNo; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string m_caStockNo; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string m_caName; public int m_nOpen; public int m_nHigh; public int m_nLow; public int m_nClose; } 不過這樣是把字串視為 TCHAR[],不一定等於 char[],所以不確定可不可以。如果不行 的話可以改用下面這個: [StructLayout(LayoutKind.Sequential)] public unsafe struct TStock { public short m_sStockidx; public byte m_cMarketNo; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] public byte[] m_caStockNo; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public byte[] m_caName; public int m_nOpen; public int m_nHigh; public int m_nLow; public int m_nClose; } 這樣是一定可以,只是要自己使用 System.Text.Encoding.Default 將字串轉成 byte[] ,後面可能還要記得補 '\0' (如果你重複使用那個欄位的話)。 ※ 引述《KIRA0228 (萬般帶不走)》之銘言: : 小弟使用dllimport 引入廠商的API 結果出現 嘗試是讀取或寫入受保護的記憶體, : 這通常表示其他記憶體毀損 : C++ API : int __stdcall SKQuoteLib_GetStockByNo([in] const TCHAR* lpszStockNo, : [in,out] TStock* pStock) : typedef struct STOCK : { : short m_sStockidx; // 系統自行定義的股票代碼 : char m_cMarketNo; // 市場代號0x00上市;0x01上櫃;0x02期貨;0x03選擇權;0x04興櫃 : char m_caStockNo[20]; // 股票代號 : char m_caName[10]; // 股票名稱 : int m_nOpen; // 開盤價 : int m_nHigh; // 最高價 : int m_nLow; // 最低價 : int m_nClose; // 成交價 : } TStock; : 小弟的 : C# : [DllImport("SKQuoteLib.dll",CharSet=CharSet.Ansi)] : public static extern int SKQuoteLib_GetStockByNo(string strStockNo, ref TStock stk); : Status= SKQuoteLib_GetStockByNo("2330", ref stock); : [StructLayout(LayoutKind.Sequential)] : public struct TStock : { : public int Stockidx; : public byte MarketNo; : public string StockNo; : public string StockName; : public long Open; : public long High; : public long Low; : public long Close; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.78.32

06/14 09:39, , 1F
感謝大大的解答 可是還是搞不定 看來有其他問題
06/14 09:39, 1F
文章代碼(AID): #1ACSpqG2 (C_Sharp)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
2
3
完整討論串 (本文為第 2 之 2 篇):
問題
2
3
文章代碼(AID): #1ACSpqG2 (C_Sharp)