C++ cli C++/围绕C静态库的CLI托管包装器

C++ cli C++/围绕C静态库的CLI托管包装器,c++-cli,C++ Cli,救命啊 这似乎是一项相当简单的任务,我感到筋疲力尽/沮丧。我不确定我做错了什么;更不用说我是否做对了。在开发WPF应用程序(VS2010,C#4.0)时,我“被要求”使用现有的库(一个C静态库——超过100000行的C代码)。哦,我不能碰现有的C代码-按原样使用 我读过很多帖子(高级主题、操作指南等),但我对C++/CLI太陌生了,根本没什么意义。据我所知,最好的方法是将C静态库包装如下: 非托管C静态库C++/CLI托管包装DLL 托管WPF应用程序 这是精简的C头文件: /* Call th

救命啊

这似乎是一项相当简单的任务,我感到筋疲力尽/沮丧。我不确定我做错了什么;更不用说我是否做对了。在开发WPF应用程序(VS2010,C#4.0)时,我“被要求”使用现有的库(一个C静态库——超过100000行的C代码)。哦,我不能碰现有的C代码-按原样使用

我读过很多帖子(高级主题、操作指南等),但我对C++/CLI太陌生了,根本没什么意义。据我所知,最好的方法是将C静态库包装如下:

非托管C静态库C++/CLI托管包装DLL 托管WPF应用程序

这是精简的C头文件:

/* Call this function to execute a command. */
int issue_command(int command, long param1, long param2);

/* Completion call back function; you must supply a definition. */
extern  int command_completed(int command, long param1, long param2);

struct struct_command_str
{
      char   command_str[10];
      char   param1_st[2];
      char   param2_st[2];
      char   success;
};

/* You must supply definitions to the following extern items. */
extern  int command_status;
extern struct struct_command_str  command_str;
问题:

我似乎不能正确地为回调函数和两个外部项(
command\u status
和struct
command\u str
)提供一个C++/CLI实现

有人能为上述缺少的回调函数和外部程序提供一个示例C++/CLI实现吗


提前感谢您的帮助。

在您的C++/CLI托管包装器项目中,添加2个文件:

a.c文件:

extern void doSomething();

int command_status = 0;

struct_command_str command_str = { "command1", "p1", "p2", 't' };

int command_completed(int command, long param1, long param2) {
    ...
    command_status = 1;
    ...
    doSomething();
    ...
    command_status = 2;
    ...
    return 3;
}
cpp文件

void doSomethingManagedWrapper() {
    ...
    call managed code
    ...
}

void doSomething() {
    doSomethingManagedWrapper();
}

在C++/CLI托管包装器项目中,添加2个文件:

a.c文件:

extern void doSomething();

int command_status = 0;

struct_command_str command_str = { "command1", "p1", "p2", 't' };

int command_completed(int command, long param1, long param2) {
    ...
    command_status = 1;
    ...
    doSomething();
    ...
    command_status = 2;
    ...
    return 3;
}
cpp文件

void doSomethingManagedWrapper() {
    ...
    call managed code
    ...
}

void doSomething() {
    doSomethingManagedWrapper();
}

在c++/cli模块中实现这些功能时,请使用c头文件中显示的相同签名,但前缀为
extern“c”


在C头文件的
#include
周围放置一个
extern“C”
块。

在C++/cli模块中实现这些功能时,请使用与C头文件中显示的相同的签名,但前缀为
extern“C”


另外,在C头文件的
#include
周围放置一个
extern“C”
块。

是否可以在C++/CLI实现中包含至少一次失败的尝试?是否可以在C++/CLI实现中包含至少一次失败的尝试?Rolo上面的评论似乎解决了这些问题。我从来没有尝试过你的建议,但是非常感谢你提供的信息(藏起来以备将来使用)。我从来没有尝试过你的建议,但是非常感谢你提供的信息(把它藏起来以备将来使用)。