从C+中的C dll生成对象+; 我有一个C++程序,我在里面调用多个C++ DLL。通常我在DLL中使用构造函数和析构函数创建一个简单的类,并在构造函数中进行一些初始化。然后在主程序中,我从每个DLL类中创建多个对象,并在多线程中使用它们 MyNamespcae::MyDllClass * MyObj = new MyNamespcae::MyDllClass(/*...inputs...*/); # I make an object for each thread seperately 现在我在主C++程序中有一个强的> c>强> dll。我用\uu declspec(dllexport)导出了C函数,并在主程序中直接使用它们。这里的问题是,我在C Dll中有一些全局变量,所以我不能在多个线程中使用Dll 我的问题是,我如何在C++中从DC++中做一些面向对象的方法(比如C++中的什么),从多个线程调用它?(注意,我的问题是关于我需要在C而不是C++中做什么)

从C+中的C dll生成对象+; 我有一个C++程序,我在里面调用多个C++ DLL。通常我在DLL中使用构造函数和析构函数创建一个简单的类,并在构造函数中进行一些初始化。然后在主程序中,我从每个DLL类中创建多个对象,并在多线程中使用它们 MyNamespcae::MyDllClass * MyObj = new MyNamespcae::MyDllClass(/*...inputs...*/); # I make an object for each thread seperately 现在我在主C++程序中有一个强的> c>强> dll。我用\uu declspec(dllexport)导出了C函数,并在主程序中直接使用它们。这里的问题是,我在C Dll中有一些全局变量,所以我不能在多个线程中使用Dll 我的问题是,我如何在C++中从DC++中做一些面向对象的方法(比如C++中的什么),从多个线程调用它?(注意,我的问题是关于我需要在C而不是C++中做什么),c++,c,oop,constructor,dllexport,C++,C,Oop,Constructor,Dllexport,从语义上讲,这些变量要么是全局变量,要么不是全局变量 如果是这样,那么您必须正确地同步,因此您需要从C方法中导出的不是变量,而是通过正确的同步访问这些变量的函数 如果它们不需要是全局的,并且您希望为每个线程分配一个(或多个),那么您可以为每个这样的对象类型导出两个C函数,myobj\t new\u dllobj(…)和delete\u dllobj(myobj\u t obj),分配、构造、销毁和释放这些对象。Lorinczy Zsigmond共享的链接是:解决了我的问题。为了方便起见,我在此重

从语义上讲,这些变量要么是全局变量,要么不是全局变量

如果是这样,那么您必须正确地同步,因此您需要从C方法中导出的不是变量,而是通过正确的同步访问这些变量的函数


如果它们不需要是全局的,并且您希望为每个线程分配一个(或多个),那么您可以为每个这样的对象类型导出两个C函数,
myobj\t new\u dllobj(…)
delete\u dllobj(myobj\u t obj)
,分配、构造、销毁和释放这些对象。

Lorinczy Zsigmond共享的链接是:解决了我的问题。为了方便起见,我在此重复其内容:

头文件:/*mytype.h*/

源代码:/*mytype.c*/

#包括
#包括
#包括“mytype.h”
结构MyType{
int-somedata;
};
MyType*MyType\u Alloc(整数部分){
MyType*mp=malloc(sizeof*mp);
MP-> SOMDEATA=PAR;
返回mp;
}
无效MyType_发布(MyType*mp){
memset(mp,0,sizeof*mp);
免费(mp);
}
整型MyType_操作1(整型*mp,整型par1,整型par2){
返回mp->somedata+par1+par2;
}
测试:/*mytypetest.c*/

#包括
#包括“mytype.h”
内部主(空){
MyType*mp=MyType_Alloc(20200000);
int sum=MyType_操作1(mp,100,25);
printf(“总和=%d\n”,总和);
MyType_释放(mp);
返回0;
}

不要在C代码中使用静态变量。在C语言中,可以使用
malloc
free
realloc
进行内存管理。(一些提示:)@ LorinczyZsigmond,如果我声明C++中的变量,我也不想这样做。我需要将所有与C相关的内容都保存在Dll中,除非你是指其他内容。当然,我是指其他内容;)这里有一个例子:@Lorinczyzigmond第二个链接完成了这项工作,我对评论投了赞成票。谢谢。这和@root写的完全一样。还有Yossi Kreinin(在我的第一个链接中)。尽管如此,如果您对线程同步(例如使用pthread mutex)有疑问,一定要问他们。该链接没有同步,它只是与我所说的
new\u dllobj()
delete\u dllobj()
相当,至于globals是否真的需要是globals,这个问题还不清楚。@root一开始我误解了同步的概念。是的,我可以使用同步方法(我在dll之外使用),但这会减慢我的程序,所以它不在表中。我将变量设置为全局变量,以便在多个函数中使用它们,但除此之外,它们不需要是全局变量(我在分配函数的帮助下删除了这些变量)。谢谢
#ifndef MYTYPE_H
#define MYTYPE_H

typedef struct MyType MyType; /* opaque */

MyType *MyType_Alloc (int par);
void    MyType_Release (MyType *mp);

int MyType_Operation1 (MyType *mp, int par1, int par2);

#endif
#include <stdlib.h>
#include <string.h>

#include "mytype.h"

struct MyType {
    int somedata;
};

MyType *MyType_Alloc (int par) {
    MyType *mp= malloc (sizeof *mp);
    mp->somedata= par;
    return mp;
}

void MyType_Release (MyType *mp) {
    memset (mp, 0, sizeof *mp);
    free (mp);
}

int MyType_Operation1 (MyType *mp, int par1, int par2) {
    return mp->somedata + par1 + par2;
}
#include <stdio.h>

#include "mytype.h"

int main (void) {
    MyType *mp= MyType_Alloc (20200000);
    int sum= MyType_Operation1 (mp, 100, 25);
    printf ("sum=%d\n", sum);
    MyType_Release (mp);
    return 0;
}