如何在MFC中调用C文件里面的函数

如何在MFC中调用C文件里面的函数,第1张

如果源文件是c的话,默认所有导出函数都隐含加了extern "C"的属性
你在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);
像这样。
代码大概是这个意思,没测试编译。如果哪里有报错自己改一下应该可以……?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12626153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存