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

關於錯誤Define * to be your compiler's keyword for "standard call"

答題得分者是:syntax
stwave
一般會員


發表:9
回覆:9
積分:3
註冊:2005-03-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-03-12 12:18:04 IP:114.40.xxx.xxx 訂閱
請問
小弟現在想要使佣BCB取一CCD(Prosilica EC1350)的影像.
但是原廠只有提供VC的範例..
才建新專案,宣告#include "PdApi.h"而已就出現下面錯誤..
[C Fatal Error] PdApi.h(39): F1003 Error directive: Define PDAPI to be your compiler's keyword for "standard call"
不知道是什麼問題?
照字面是定義為關鍵字..但是拜了G大神..找不到@@

在"PdApi.h"中開頭如下!
[code cpp]
#ifndef PDAPI_H_INCLUDE
#define PDAPI_H_INCLUDE

#ifdef __cplusplus
extern "C" {
#endif

//===== INCLUDE FILES =========================================================
//===== #DEFINES ==============================================================
#ifdef _MSC_VER
#define PDAPI __stdcall
#else
#error Define PDAPI to be your compiler's keyword for "standard call"
#endif


#define PDINFINITE 0xFFFFFFFF
//===== TYPE DEFINITIONS ======================================================
[/code]
編輯記錄
stwave 重新編輯於 2010-03-12 12:34:17, 註解 無‧
stwave 重新編輯於 2010-03-12 12:58:42, 註解 無‧
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-03-12 14:44:59 IP:59.125.xxx.xxx 訂閱
#ifdef _MSC_VER
#define PDAPI __stdcall
<--- 這不就告訴你答案了嗎?
如果是 MSC VER,應該是如果是微軟的編譯器,就將 PDAPI 定義為 stdcall
白話文:
該作者將呼叫慣例 stdcall, pascal call, ...不懂這是什麼的,請自行查詢本站內容,使用定義來取代,以便能正確運作
而在微軟的平台上,若是使用其 Windows API ,則都是 stdcall,沒有別種選擇,因為編譯好的DLL就是使用stdcall
所以,這裡可以看出,你所使用的 Lib 也是使用 stdcall,只是,不同編譯器,對 stdcall 的關鍵字,也有所差異
所以你應該要做的是「查出 BCB 上使用 stdcall 時,所使用的關鍵字」,這給你自己去查
然後將「#error Define PDAPI to be your compiler's keyword for "standard call"」 這行刪除換成 「#define PDAPI xxxx
其中 xxxx 就是你查到的東西
如果BCB 的語法一樣,那就簡單的下個 「#define _MSC_VER」,即可

不知這樣你清楚了嗎?

===================引 用 stwave 文 章===================
請問
小弟現在想要使佣BCB取一CCD(Prosilica EC1350)的影像.
但是原廠只有提供VC的範例..
才建新專案,宣告#include "PdApi.h"而已就出現下面錯誤..
[C Fatal Error] PdApi.h(39): F1003 Error directive: Define PDAPI to be your compiler's keyword for "standard call"
不知道是什麼問題?
照字面是定義為關鍵字..但是拜了G大神..找不到@@

在"PdApi.h"中開頭如下!
[code cpp]
#ifndef PDAPI_H_INCLUDE
#define PDAPI_H_INCLUDE

#ifdef __cplusplus
extern "C" {
#endif

//===== INCLUDE FILES =========================================================
//===== #DEFINES ==============================================================
#ifdef _MSC_VER
#define PDAPI__stdcall
#else
#error Define PDAPI to be your compiler's keyword for "standard call"
#endif


#define PDINFINITE 0xFFFFFFFF
//===== TYPE DEFINITIONS ======================================================
[/code]
stwave
一般會員


發表:9
回覆:9
積分:3
註冊:2005-03-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-03-12 22:57:02 IP:114.40.xxx.xxx 訂閱
就是加入
#define PDAPI __fastcall
或是在裡面新增 #define _MSC_VER
兩種方式都可以編譯過。晚點是一下呼叫裡面的涵式..
那這個問題只是要針對不同的編譯器,而定義相 對的關鍵字這樣嗎?
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-03-15 09:55:32 IP:59.125.xxx.xxx 訂閱
是的,不過如果是 STD Call 的話 BCB 的語法是使用 _stdcall 或  __stdcall 都可以
http://docwiki.embarcadero.com/RADStudio/en/C++Builder_Keyword_Extensions
Fast Call 與 STD Call 是不同的東西

===================引 用 stwave 文 章===================
就是加入
#define PDAPI__fastcall
或是在裡面新增 #define _MSC_VER
兩種方式都可以編譯過。晚點是一下呼叫裡面的涵式..
那這個問題只是要針對不同的編譯器,而定義相 對的關鍵字這樣嗎?
系統時間:2024-04-19 7:37:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!