青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

martin

thinking

常用鏈接

統計

software

最新評論

C/C++混合編程

前段時間,碰到了C,C++混合編程的需求,經過努力,順利解決問題.現把這方面的知識做一下簡單的總結:
 
1.當C++文件要用到C語言中的函數代碼時,采用下屬方法即可:
在C++中的.h文件或.cpp文件中加入下列代碼,
#define LINT_ARGS 1
extern "C" {
#include "system.h"
}
 
然后在代碼中直接調用這些函數即可.

注解:
1.1 LINT_ARGS 1表示在檢查C語言中的函數原型時,要對函數原型的參數進行檢查. 
1.2. "{ }" 中包含的頭文件為C語言中的頭文件.
1.3.extern "C" 告訴鏈接器,這些頭文件中的函數被當做C語言中的函數來處理.
 
下面以一個實例加以說明:
下面為一個C語言的頭文件(sysgct.h):
#ifdef LINT_ARGS
  int  GCT_send(unsigned int task_id, HDR *h);
  ......
#else
  int  GCT_send();
  ......
#endif
~
in file MapBaseReq.cpp 文件中
#include ....
extern "C"
{
#include "sysgct.h"
}
void
MapBaseReq::sendPdu(const BasePdu_var& thePduP)
{
    ...
    if (GCT_send(m->hdr.dst, (HDR *)m) != 0)
        {
                relm((HDR *)m);
                SETERR1(errSWErrorMsg, "sendPdu(): GCT_send() Failed");
        }
   ...
}
 
2.當C文件要用到C++語言某個類中的方法時,可以采用下列方法:
2.1 在cpp文件中用下列方式定義函數:
extern "C" returnType FunName(parameters list).
 
2.2 然后在相應的頭文件中進行聲明:
extern returnType FunName(parameters list);
 
2.3 在相應的.c文件中包含該頭文件,然后直接利用相應的函數即可.
 
下面給出實例.
 
2.4 cpp文件

#include <iostream>
#include <iomanip>
#include "TTDebug.h"
using namespace std;

extern "C"
{
#include "Utility.h"
}

static int display_hex_buffer(unsigned char* buffer, unsigned char* ptr,int len);

extern "C" void tDebug_traceFunc(int level, char* trace)
{
        TDEBUG_TRACEFUNC(level,trace);
}

extern "C" void nDebug(int level, unsigned char* args, int iLen, int cid)
{
        unsigned char buf[512];
        if(0 != TTDebug::instance() && TTDebug::instance()->isTTDebugOn(level))
        {
                /* Check whether the current thread already holds the mutex lock */
                LockGuard<MutexWrapper> guard(TTDebug::instance()->mutex());
                TTDebug::instance()->traceStart(level, __FILE__, __LINE__);
                memset(buf,0,512);
                display_hex_buffer(buf,args,iLen);
                TTDebug::instance()->outStream() << "Send Msg(0-0x" << setw(4) << setfill('0') << hex << cid <<"):0x" << buf;
                TTDebug::instance()->traceEnd();
        }
}

2.5 .h 文件

#ifndef __UTILITY_H
#define __UTILITY_H

extern void tDebug_traceFunc(int level, char* trace);
extern void nDebug(int level, unsigned char* args,int iLen, int cid);

#endif
 
2.6 cpp文件中定義的函數在c文件中調用實例
在test.c文件中:

...

int ctu_ent(msg,pInt)
  MSG* msg;
  int *pInt;
{

 tDebug_traceFunc(10,"ctu ctu_ent");

  HDR *h;
  MSG *m;

   ...

}

...


posted on 2009-03-03 16:25 martin_yahoo 閱讀(4832) 評論(3)  編輯 收藏 引用

評論

# re: C/C++混合編程 2009-03-03 20:44 夢在天涯

不錯!很有用
在《C++編程思想》中有提到
extern "C"
{
#include "Utility.h"
}!  回復  更多評論   

# re: C/C++混合編程 2009-03-05 22:46 cdy20


c+上c頭文件名,也可以
比如#include<cstdio>........  回復  更多評論   

# re: C/C++混合編程[未登錄] 2009-03-05 23:20 martin_yahoo

@cdy20
只不過是在c頭文件中已經加上了如下類似的語句:
#ifdef _c_plus_plus
extern "C"{
#endif
.....
#ifdef _c_plus_plus
}
#endif

如果在c語言的頭文件中加上述語句, 就應象采用隨筆中提到的做法.
  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲婷婷在线| 小处雏高清一区二区三区| 麻豆精品一区二区综合av| 欧美亚洲日本一区| 亚洲欧美日韩久久精品| 欧美中文在线观看国产| 久久国产视频网站| 男女精品网站| 欧美三级资源在线| 国产精品乱码久久久久久| 国产亚洲激情在线| 在线免费日韩片| 亚洲天堂成人| 久久尤物视频| 亚洲精品久久久蜜桃| 一区二区三区色| 欧美一区二区三区免费大片| 噜噜噜91成人网| 欧美日韩免费观看中文| 国产日韩精品在线观看| 亚洲日本无吗高清不卡| 午夜精品一区二区在线观看 | 欧美另类在线播放| 国产精品家庭影院| 精品不卡一区| 亚洲综合社区| 欧美成人资源| 亚洲欧美视频在线观看| 欧美精品999| 国产日韩欧美一区二区| 亚洲第一福利社区| 亚洲欧美一区二区视频| 麻豆成人精品| 亚洲一区视频| 欧美精品一区二区精品网| 国产一区二区三区无遮挡| 亚洲小说欧美另类社区| 欧美国产亚洲视频| 欧美一区二区大片| 欧美视频在线一区| 日韩视频精品在线观看| 久久综合一区| 欧美一区1区三区3区公司| 欧美特黄一区| 一本色道久久加勒比精品| 欧美成人精品在线| 久久精品123| 国产亚洲精品久久久| 亚洲欧美日韩中文播放| 日韩视频中文| 欧美日韩一区二区三区四区在线观看| 揄拍成人国产精品视频| 久久久久久久999精品视频| 一区二区高清| 国产精品久久7| 亚洲综合电影| 中文日韩在线| 国产精品麻豆va在线播放| 亚洲婷婷综合色高清在线| 亚洲国产经典视频| 欧美激情久久久| 99精品视频一区| 亚洲乱码国产乱码精品精98午夜 | 久久久久久久一区二区三区| 亚洲一区二区三区中文字幕| 国产精品国产a级| 欧美一级大片在线免费观看| 亚洲欧美日韩国产一区二区三区| 国产欧美日韩亚洲一区二区三区 | 亚洲天堂偷拍| 国产精品美女主播| 午夜在线a亚洲v天堂网2018| 亚洲一区国产| 一区二区三区在线视频观看| 欧美高清成人| 欧美视频1区| 久久aⅴ国产欧美74aaa| 久久av一区二区三区漫画| 狠狠干综合网| 亚洲第一久久影院| 欧美午夜不卡视频| 久久国产精品99久久久久久老狼| 久久久久一区二区| 一本色道久久88精品综合| 亚洲一区二区伦理| 在线精品视频在线观看高清 | 欧美激情视频在线播放| 亚洲三级免费电影| 国产精品成人一区二区艾草| 欧美在线视频一区二区三区| 久久精品一区二区三区中文字幕| 亚洲国产一区二区三区青草影视| 999亚洲国产精| 激情av一区二区| 日韩亚洲视频| 激情视频一区| 亚洲另类一区二区| 国产性天天综合网| 亚洲人成亚洲人成在线观看| 国产日韩在线一区| 亚洲人成网站999久久久综合| 国产亚洲观看| 亚洲狼人精品一区二区三区| 韩日在线一区| 亚洲视频www| 亚洲精品字幕| 久久黄色级2电影| 亚洲一区二区三区四区中文 | 欧美专区在线观看一区| 亚洲无线一线二线三线区别av| 欧美伊人久久久久久午夜久久久久| 亚洲人成啪啪网站| 久久国产免费| 久久精品视频一| 国产精品hd| 亚洲欧洲精品一区二区精品久久久| 国内精品久久久久久影视8 | 欧美国产一区二区三区激情无套| 国产精品呻吟| 亚洲精品乱码久久久久久蜜桃91| 韩日欧美一区| 欧美一区二区免费| 午夜在线播放视频欧美| 欧美日韩另类一区| 亚洲福利国产精品| 在线成人欧美| 久久精品一本| 久久天天综合| 国语自产精品视频在线看一大j8| 亚洲欧美亚洲| 欧美一区二区三区在线免费观看| 欧美日韩一区二区在线观看视频| 亚洲国产欧美一区| 日韩午夜精品视频| 欧美激情一区二区三区四区| 亚洲成色www久久网站| 亚洲黄色成人网| 欧美jizz19性欧美| 亚洲二区在线观看| 日韩视频永久免费| 欧美日韩黄视频| 制服丝袜亚洲播放| 午夜精品视频在线| 国产精品一区免费视频| 亚洲欧美日韩综合一区| 久久久99爱| 亚洲国产精品久久久久秋霞不卡 | 亚洲在线一区二区| 久久久视频精品| 久久婷婷色综合| 一区二区在线观看视频| 免费人成网站在线观看欧美高清| 欧美风情在线| 日韩午夜黄色| 国产精品入口福利| 欧美在线视屏| 亚洲丶国产丶欧美一区二区三区| 亚洲国内在线| 欧美日韩一区二区三区免费| 亚洲一级黄色片| 久久久久国产精品一区| 亚洲第一精品夜夜躁人人爽| 欧美精品18videos性欧美| 正在播放欧美一区| 美女诱惑黄网站一区| 中文国产一区| 精久久久久久久久久久| 欧美精品九九99久久| 亚洲欧美日韩国产一区二区| 蘑菇福利视频一区播放| 亚洲午夜久久久久久尤物| 国内精品久久久久久久97牛牛| 欧美成人免费在线| 亚洲欧美精品在线| 亚洲第一精品电影| 性做久久久久久久免费看| 亚洲国产婷婷综合在线精品| 国产美女精品| 欧美日韩国产成人高清视频| 久久久久久精| 亚洲一区二区三| 亚洲国产成人久久综合| 久久久久se| 亚洲一区二区黄| 亚洲国产毛片完整版| 国产视频一区三区| 欧美午夜一区| 欧美搞黄网站| 久久三级视频| 香蕉久久久久久久av网站| 亚洲精品日韩在线观看| 农村妇女精品| 久久久噜噜噜久久| 午夜一区在线| 亚洲色图在线视频| 亚洲精品视频在线看| 在线免费不卡视频| 精品成人免费| 一区免费观看| 激情成人综合网|