C++调用C函数

我新建了个MFC工程,包含了MD5的C文件,并且按照__cdecl编译成C代码,但是我在工程主对话框的.cpp文件调用时总出现如下错误,用C的时候是没有的:
error C2660: “MD5Init”: 函数不接受 1 个参数
error C2660: “MD5Update”: 函数不接受 3 个参数
error C2660: “MD5Final”: 函数不接受 2 个参数

extern "C"{ #include "md5.h"};

 

... MD5Init( &context ); MD5Update( &context, szInput, nInLen ); MD5Final( szOutput, &context );

 

 

/*1.把函数声明改成(md5.h中的)*/ void MD5Init (MD5_CTX *);

 void MD5Update (MD5_CTX *, unsigned char *, unsigned int);

void MD5Final (unsigned char [16], MD5_CTX *);

 

/*2.在md5c.c右键 ---> 属性 ---> C/C++ ---> 高级 ---> 调用约定:与工程相同(我这里是__stdcall(/GZ)),编译为:C代码。 如果调用约定与工程的不相同,只能用汇编调用了。 还有预编译头,我这里为:不使用预编译头*//*

 

3.包含头文件时用extern "C"*/extern "C"{ #include "md5.h"};

 

//4.这样就可以使用了: MD5Init(&context); MD5Update(&context, (unsigned char *)szName, dtLength); MD5Final(szHash, &context);

 

 

 

转自:http://topic.csdn.net/u/20120621/08/52bc65dd-ce03-41ac-9a77-2b50012ce091.html?seed=1896487601&r=78920926#r_78920926

posted @ 2012-06-21 09:48  zhiweiyouzhishenghuo  阅读(165)  评论(0编辑  收藏  举报