1

だから私はここここ、そして最初の質問で言及された他のいくつかのリンクを見てきました.私はすでに次のコードを持っています:

.cpp ファイル:

#include "arp_piping.h"

#include <string>
#include <iostream>
#include <stdio.h>

std::string exec(char* cmd, FILE* pipe) {
    pipe = _popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
       if(fgets(buffer, 128, pipe) != NULL)
              result += buffer;
    }
    _pclose(pipe);
    return result;
}

ヘッダー/リンカー ファイル:

#ifndef ARP_PIPING_H
#define ARP_PIPING_H
#endif

#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif

my function goes here something like 
EXTERNC .....exec(char* cmd, FILE* pipe) ????

#undef EXTERNC

私の質問は、何を入力すればよいかわからないため、上記のビットに何が入るかです。C のメイン関数から .cpp ファイルの関数を呼び出そうとしています。int main(int argc, char** argv) {}

4

2 に答える 2

3

cpp ファイルで関数を extern "C" として宣言する必要があります。

extern "C" char *exec(char* cmd, FILE* pipe) {
   ...
}

ヘッダー/リンカー ファイルでは、次のようにキーワード「extern」を使用してプロトタイプを宣言する必要があります。

extern char *exec(char* cmd, FILE* pipe);

また、C++ の std::string を C コードに返しますか?

于 2013-07-19T07:17:24.483 に答える