你在CPP里使用那些函数,应该需要在声明里加上extern "c"属性的,否则链接器会按CPP方式去查找函数,这当然是找不到的
按理说开源工程一般都会做得比较细心才对啊,你看一下它的头文件,一般在开头都会有类似下面的代码,包括windows的头文件,全部都会有的
#ifdef __cplusplus
extern "C" {
#endif
xxxxxx函数声明
#ifdef __cplusplus
}
#endif//定义并设置画笔粗细
CPen bLine;
bLineCreatePen(PS_INSIDEFRAME|PS_SOLID,2,RGB(0,0,0));
//创建DC
CPaintDC dc(this);
dcSelectObject(bLine);
//划线
dcMoveTo(5,20);//划线起点
dcLineTo(395,20);//划线终点
//销毁画笔,Create创建的对象都要调用DeleteObject()
bLineDeleteObject()
我只是举个例子
class CMyAppDlg : public CDialog {
void CallThreadFunc(int a, int b);
static UINT ThreadFuncWrapper(LPVOID p);
struct ThreadParam {
CMyAppDlg pThisl;
int a;
int b;
}; //根据线程函数的参数而定
void ThreadFunc(int a, int b); //线程函数,自己写
};
void CMyAppDlg::CallThreadFunc(int a, int b) {
ThreadParam tp;
(LPVOID)&tp = malloc(sizeof(ThreadParam));
tppThis = this;
tpa = a;
tpb = b;
CWinThread t = AfxBeginThread(&CMyAppDlg::ThreadFuncWrapper, tp, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
t->m_bAutoDelete = TRUE;
t->ResumeThread();
}
UINT CMyAppDlg::ThreadFuncWrapper(LPVOID p) {
ThreadParam param = (ThreadParam)p;
free(p);
parampThis->ThreadFunc(parama, paramb);
return 0;
}
调用的地方:
CallThreadFunc(1, 2);
像这样。
代码大概是这个意思,没测试编译。如果哪里有报错自己改一下应该可以……?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)