線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:7008
推到 Plurk!
推到 Facebook!

FTDI ftd2xx.dll DllImport宣告問題

答題得分者是:aftcast
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-05-18 11:25:02 IP:59.127.xxx.xxx 訂閱
請教前輩們:
因剛跨進VC .net, 很多觀念尚未釐清, 目前在使用ftd2xx.dll發生問題, 請前輩們指導一下

情況如下:
目前能在MyForm.h中宣告
#define FT_PREFIX [DllImport("FTD2XX.dll")]
FT_PREFIX FT_STATUS FT_Open(int deviceNumber, FT_HANDLE * pHandle);
並且能在按鍵事件中成功使用該函式
FT_STATUS ftStatus = FT_OK;
FT_HANDLE handle;
ftStatus = FT_Open(0, &handle);

但小弟想要把該DLL的functions宣告,集中在某個.h檔案中,但同樣的宣告會出現如下錯誤訊息
error C2337: 'DllImport' : 找不到屬性; 這個版本的 Visual C 不支援
請問該如何修正

謝謝




taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-05-18 13:33:55 IP:59.127.xxx.xxx 訂閱
自問自答,加上
using namespace System::Runtime::InteropServices;
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-05-18 14:10:21 IP:114.32.xxx.xxx 訂閱
印象中除了你說的這個方法外,我記得好像可以用普通方式(win32)加入廠商的 h 檔與 lib 檔就可以。但可能確定一下 compiler是用 /clr 的方式 ( clr:pure 好像不行)。
大概快2年沒搞 vc /cli 了。有點不確定。 若有空,可以試一下下。

當然,你目前用的方式是所有 .net 的正統用法。 不過, vc /cli 有特殊的能力可以混 managed 與 unmanaged code。
===================引 用 taishyang 文 章===================
自問自答,加上
using namespace System::Runtime::InteropServices;
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-05-18 14:19:27 IP:114.32.xxx.xxx 訂閱
另外補充我以前用 c++/cli 的一些感言。  其實它就像我在用 c++ builder 一樣的,也是 "小三"。  正房是 c#。  換句話說, c++/cli 的資源非常的少。你又要特別去處理 cli 特有的型別,然後再 marsalling 比如 string vs String。 還有 ^ 與 * 指標的意義不一樣… 要學的不少,資源又少。
我還特別去搞了一個程式,叫 charp to cplus,專門把網路上的一些 c# 的例子、程式,透過它來轉成 cli。 有需要的話可以找一下這個程式。

如果說不是一種堅持,說真的,就 c# 了吧。 再不然就是 mfc 。 c /cli 是小三 (無誤

不過有一個小優點,就是它與 c /cx 的語法很接近。這個 c /cx 是 native code喔, for winrt (windows runtime ,新一代的windows api)。 ^^
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-05-18 14:35:37 IP:59.120.xxx.xxx 未訂閱
建議在 KTOP 增開個小三版好了 (大誤)
===================引 用 aftcast 文 章===================
另外補充我以前用 c /cli 的一些感言。 其實它就像我在用 c builder 一樣的,也是 "小三"。 正房是 c#。 換句話說, c /cli 的資源非常的少。你又要特別去處理 cli 特有的型別,然後再 marsalling 比如 string vs String。 還有 ^ 與 * 指標的意義不一樣… 要學的不少,資源又少。
我還特別去搞了一個程式,叫 charp to cplus,專門把網路上的一些 c# 的例子、程式,透過它來轉成 cli。 有需要的話可以找一下這個程式。

如果說不是一種堅持,說真的,就 c# 了吧。 再不然就是 mfc 。 c /cli 是小三 (無誤

不過有一個小優點,就是它與 c /cx 的語法很接近。這個 c /cx 是 native code喔, for winrt (windows runtime ,新一代的windows api)。 ^^
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-05-18 14:54:38 IP:59.127.xxx.xxx 訂閱
看來我只有小三命, AP端我只會BCB, 因為工作需要最近才接觸VC++.net (現在這邊不喜歡BCB@@)
又因之前控制周邊的function 都是用C 包成class, 相容性的關係, C#應該是無緣了
UI的部分又覺得MFC不怎麼友善, 所以只好硬著頭皮衝啦~~

===================引 用 GrandRURU 文 章===================
建議在 KTOP 增開個小三版好了 (大誤)
===================引 用 aftcast 文 章===================
另外補充我以前用 c /cli 的一些感言。 其實它就像我在用 c builder 一樣的,也是 "小三"。 正房是 c#。 換句話說, c /cli 的資源非常的少。你又要特別去處理 cli 特有的型別,然後再 marsalling 比如 string vs String。 還有 ^ 與 * 指標的意義不一樣… 要學的不少,資源又少。
我還特別去搞了一個程式,叫 charp to cplus,專門把網路上的一些 c# 的例子、程式,透過它來轉成 cli。 有需要的話可以找一下這個程式。

如果說不是一種堅持,說真的,就 c# 了吧。 再不然就是 mfc 。 c /cli 是小三 (無誤

不過有一個小優點,就是它與 c /cx 的語法很接近。這個 c /cx 是 native code喔, for winrt (windows runtime ,新一代的windows api)。 ^^
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-05-18 15:01:11 IP:59.127.xxx.xxx 訂閱
aftcast前輩:
原廠提供的.lib加入專案後會出現連結錯誤(sample code有提到)所以就沒再往下試了
另外您提到的charp to cplus程式有沒有連結可以提供一下^^? 我google一會似乎沒找著
3Q~~



===================引 用 aftcast 文 章===================
另外補充我以前用 c /cli 的一些感言。 其實它就像我在用 c builder 一樣的,也是 "小三"。 正房是 c#。 換句話說, c /cli 的資源非常的少。你又要特別去處理 cli 特有的型別,然後再 marsalling 比如 string vs String。 還有 ^ 與 * 指標的意義不一樣… 要學的不少,資源又少。
我還特別去搞了一個程式,叫 charp to cplus,專門把網路上的一些 c# 的例子、程式,透過它來轉成 cli。 有需要的話可以找一下這個程式。

如果說不是一種堅持,說真的,就 c# 了吧。 再不然就是 mfc 。 c /cli 是小三 (無誤

不過有一個小優點,就是它與 c /cx 的語法很接近。這個 c /cx 是 native code喔, for winrt (windows runtime ,新一代的windows api)。 ^^
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-05-18 15:24:15 IP:114.32.xxx.xxx 訂閱
喔? 可能我記錯了… > <
我說的那軟體在這裡:
http://www.tangiblesoftwaresolutions.com/Product_Details/CSharp_to_CPlusPlus_Converter_Details.html

===================引 用 taishyang 文 章===================
aftcast前輩:
原廠提供的.lib加入專案後會出現連結錯誤(sample code有提到)所以就沒再往下試了
另外您提到的charp to cplus程式有沒有連結可以提供一下^^? 我google一會似乎沒找著
3Q~~


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-05-18 15:36:40 IP:114.32.xxx.xxx 訂閱
另外,剛去回憶之前的實作,於是就查到了下面的範例 :  (沒錯,也是用 explicit p/invoke的方式,如你開始用的一樣)。不過這範例完整,你可以整個run一下。
http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/VC /vc_net_example.zip
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-05-18 15:52:41 IP:59.127.xxx.xxx 訂閱
3Q ^__^
===================引 用 aftcast 文 章=================== 喔? 可能我記錯了… > <
我說的那軟體在這裡:
http://www.tangiblesoftwaresolutions.com/Product_Details/CSharp_to_CPlusPlus_Converter_Details.html

===================引 用 taishyang 文 章===================
aftcast前輩:
原廠提供的.lib加入專案後會出現連結錯誤(sample code有提到)所以就沒再往下試了
另外您提到的charp to cplus程式有沒有連結可以提供一下^^? 我google一會似乎沒找著
3Q~~


taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-05-18 16:06:27 IP:59.127.xxx.xxx 訂閱
aftcast前輩:

我一開始的狀況跟這個連結一模一樣
http://bbs.csdn.net/topics/300052554

後來有找到你提供的這個範例,但我用VS2013沒辦法開啟,專案升級會有問題RUN不起來@@
最後參考這範例將以前的ftd2xx.h檔的
FTD2XX_API
FT_STATUS WINAPI FT_XXXXXX
改成範例的形式, 但出現一開始提到的錯誤訊息, 最終加上
using namespace System::Runtime::InteropServices;

突然就看見曙光了^^


===================引 用 aftcast 文 章===================
另外,剛去回憶之前的實作,於是就查到了下面的範例 : (沒錯,也是用 explicit p/invoke的方式,如你開始用的一樣)。不過這範例完整,你可以整個run一下。
http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/VC /vc_net_example.zip
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-05-18 21:54:22 IP:114.32.xxx.xxx 訂閱
看了你提到的錯誤訊息後,我剛剛親自來試了一下,順便回憶之前所學。發現稍早和你說的應該是沒錯的。可以使用"一般"的 h 檔 (如mfc用的)。重點在你應該忘了先 include windows.h
此外,稍早我是有個小地方記錯,就是要用這種 「implicit p invoke」的前題是compiler不能選「安全 MSIL Common Language Runtime 支援 (/clr:safe)」這個。專案預設的/clr:pure是ok的。而「/clr」更是沒問題。(我常用這個)。
這種C Interop (Implicit PInvoke)的方式是 vc 特有的,不用可惜。當小三總也要有比人強一點的地方,是吧?! ^^ 。有時間的話你再參考一下。
以下附我成功的圖。若沒加入 windows header,情形就會如你之前看的錯誤。



===================引 用 taishyang 文 章===================
aftcast前輩:

我一開始的狀況跟這個連結一模一樣
http://bbs.csdn.net/topics/300052554

後來有找到你提供的這個範例,但我用VS2013沒辦法開啟,專案升級會有問題RUN不起來@@
最後參考這範例將以前的ftd2xx.h檔的
FTD2XX_API
FT_STATUS WINAPI FT_XXXXXX
改成範例的形式, 但出現一開始提到的錯誤訊息, 最終加上
using namespace System::Runtime::InteropServices;

突然就看見曙光了^^


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#13 引用回覆 回覆 發表時間:2015-05-19 09:47:29 IP:59.127.xxx.xxx 訂閱
感謝高高手aftcast前輩關注/指導 ^_^
系統時間:2024-11-10 22:11:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!