MFC-Dll调用带参函数报错 0x00000005

qin522106350 2013-02-06 09:49:56
typedef int (* PicMerge_)(const char *, const char*,int ,int ,int ,int ,const char*);

HINSTANCE PicMergeDLL = ::LoadLibrary ("AsdPic.dll");
if( NULL != PicMergeDLL )
{
PicMerge_ PicMerge = (PicMerge_)::GetProcAddress (PicMergeDLL, "PicMerge");
if(NULL != PicMerge)
{
//位置
CString ImgX,ImgY;
int pos = SrcImageL.Find(",");
ImgX = SrcImageL.Left(pos);
ImgY = SrcImageL.Right(SrcImageL.GetLength()-pos-1);
int ImageX = atoi(ImgX);
int ImageY = atoi(ImgY);
//图像的高宽
CString SrcX,SrcY;
pos= SrcImageSize.Find(",");
SrcX = SrcImageSize.Left(pos);
SrcY = SrcImageSize.Right(SrcImageSize.GetLength()-pos-1);
int w = atoi(SrcX);
int h = atoi(SrcY);
//char * BackJpg,*Png,*OutputFile;
//BackJpg = FolderPath.GetBuffer(0);
//Png = SreImageName.GetBuffer(0);
//OutputFile = DstPath.GetBuffer(0);
//非法访问内存错误
//开辟新内存
//BackJpg =FolderPath.GetBuffer(FolderPath.GetLength()+1);
//Png = SreImageName.GetBuffer(SreImageName.GetLength()+1);
//OutputFile = DstPath.GetBuffer(DstPath.GetLength()+1);
PicMerge("FFFFFFFFF","FFFFFFFFFFFFFFFGGGG",155,550,133,166,"GGGGGGGGGGGGG");//调用
//释放内存
//FolderPath.ReleaseBuffer();
//SreImageName.ReleaseBuffer();
//DstPath.ReleaseBuffer();
::FreeLibrary (PicMergeDLL);
}
else
{
AfxMessageBox("PicMerge函数地址错误!");
::FreeLibrary (PicMergeDLL);
}
}
else
{
AfxMessageBox("AsdPic.dll加载失败");
}


dll函数定义:
void _declspec(dllexport) __stdcall PicMerge(const char* BackJpg, const char* Png,int x,int y,int w,int h,const char* OutputFile)
{
/*
CString BojPath = PathInitialization();
char* BackPath , * PngPath , * OutputFilePath;
BackPath = new char[strlen(BackJpg)];
CString BackPathN , PngPathN , OutputFilePathN;

//strcpy(BackPathN);

memcpy(BackPath,BackJpg,strlen(BackJpg));

BackPath[strlen(BackPath)] ='\0';
BackPathN.Format("%s",BackPath);


int b = 0;
b = BackPathN.Find("\\");
if ( -1 != b)
{
BackPathN.Format("%s",BackJpg);
}
else
{
BackPathN = BojPath + BackPathN;
}
b = PngPathN.Find("\\");
if ( -1 != b)
{
PngPathN.Format("%s",Png);
}
else
{
PngPathN = BojPath + PngPathN ;
}
b = OutputFilePathN.Find("\\");
if ( -1 != b)
{
OutputFilePathN.Format("%s",OutputFile);
}
else
{
OutputFilePathN = BojPath + OutputFilePathN;
}

b = BackPathN.Find(".");
if ( -1 == b)
{
BackPathN +=".JPG";
}

b = PngPathN.Find(".");
if ( -1 == b)
{
PngPathN +=".PNG";
}

b = OutputFilePathN.Find(".");
if ( -1 == b)
{
OutputFilePathN +=".JPG";
}

// ImageF(BackPath,PngPath,x,y,w,h,OutputFilePath);

// return;
*/
}

调用后 报
“Unhandled” exception in TesD.exe(Kernel32.dll);
0xc0000005 :Access violation

怎么解决。
如果要调用 参数怎么处理
...全文
220 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiuchang 2013-02-06
  • 打赏
  • 举报
回复
应该与动态库不动态库没有关系,你不用动态库,直接把代码写一些,编译后能正确运行吗?
赵4老师 2013-02-06
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
一叶之舟 2013-02-06
  • 打赏
  • 举报
回复
看一下函数调用方式是不是一样

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧