一个C++文件读取另外一个C++生成的.dll文件报错
//要调用的.dll文件#include<iostream>#include<stdio.h>#include<windows.h>#include<tchar.h>us...
//要调用的.dll文件
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
using namespace std;
/*
int main(int argc,char* argv[])
{
FP fp; //通常是用宏FP来声明一个函数指针fp
fp=Invoke;
fp("123\n");
return 0;
}
*/
typedef void (*getData)(char* s);
void Invoke(getData callback)
{
callback("Hello World.");
}
//读取.dll的C++文件
#include "com_chnic_jni_SayHellotoCPP.h"
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
using namespace std;
JNIEXPORT void JNICALL Java_com_chnic_jni_SayHellotoCPP_sayHello
(JNIEnv* env, jobject obj, jstring name)
{
const char* pname = env->GetStringUTFChars(name, NULL);
cout << "Hello, " << pname << endl;
}
{
// 声明一个Dll实例文件句柄
HINSTANCE hDll;
// 导入Person.dll动态链接库
hDll = LoadLibrary("Person.dll");
getData callback;
callback = (getData)GetProcAddress(hDll, "callback");
int value;
value = callback("Hello World.");
printf(value);
// 卸载DLL文件
FreeLibrary(hDll);
}
编译下面那个文件的时候报错:
1>e:\visual studio 2008\projects\helloend\helloend\com_chnic_jni_sayhellotocpp.cpp(16) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>生成日志保存在“file://e:\Visual Studio 2008\Projects\HelloEnd\HelloEnd\Debug\BuildLog.htm”
1>HelloEnd - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 展开
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
using namespace std;
/*
int main(int argc,char* argv[])
{
FP fp; //通常是用宏FP来声明一个函数指针fp
fp=Invoke;
fp("123\n");
return 0;
}
*/
typedef void (*getData)(char* s);
void Invoke(getData callback)
{
callback("Hello World.");
}
//读取.dll的C++文件
#include "com_chnic_jni_SayHellotoCPP.h"
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
using namespace std;
JNIEXPORT void JNICALL Java_com_chnic_jni_SayHellotoCPP_sayHello
(JNIEnv* env, jobject obj, jstring name)
{
const char* pname = env->GetStringUTFChars(name, NULL);
cout << "Hello, " << pname << endl;
}
{
// 声明一个Dll实例文件句柄
HINSTANCE hDll;
// 导入Person.dll动态链接库
hDll = LoadLibrary("Person.dll");
getData callback;
callback = (getData)GetProcAddress(hDll, "callback");
int value;
value = callback("Hello World.");
printf(value);
// 卸载DLL文件
FreeLibrary(hDll);
}
编译下面那个文件的时候报错:
1>e:\visual studio 2008\projects\helloend\helloend\com_chnic_jni_sayhellotocpp.cpp(16) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>生成日志保存在“file://e:\Visual Studio 2008\Projects\HelloEnd\HelloEnd\Debug\BuildLog.htm”
1>HelloEnd - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 展开
展开全部
两种方法,一种是用到MFC的,就象楼上说的一样,建一个工程“MFC Wizard(dll)”,然后按提示走,再把你的CPP文件加到工程里就行了。另一种是不用到MFC,建一个“Win32 Dynamic~Link Library”工程,是一个单纯的Win32动态库,是一个空的工程,需要把你的CPP文件加入工程中,还要在你的CPP文件里加入动态库入口:
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
还要在工程里加一个.def文件,定义你的动态库需要输出的函数。内容如:
; Exports for ShowThread.DLL
LIBRARY ShowThread.DLL
EXPORTS
ContinueThread @ 1
追问
不好意思,我是C++新手,刚学,看不懂,你还是写一个最简单的C++(B端)调用另外一个C++(C端)生成的.dll文件,就是把C端产生的数据回调给B端,求代码,大神,万分感谢!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询