jpg1.dll是jpg轉bmp的,在調用時出現總是問題,想大家幫忙看看是出了什麼原因void CJpgTobmpDlg::OnButton1() //選擇jpg格式文件路徑
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE,"jpg",NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"Jpg File(*.jpg)|*.jpg||");
if(dlg.DoModal()==IDOK){
m_strJpg = dlg.GetPathName();
UpdateData(FALSE);
}
}
void CJpgTobmpDlg::OnButton2() 選擇保存bmp路徑
{
// TODO: Add your control notification handler code here
CFileDialog dlg(FALSE,"bmp",NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"Bmp File(*.bmp)|*.bmp||");
if(dlg.DoModal()==IDOK){
m_strBmp = dlg.GetPathName();
UpdateData(FALSE);
}
}
以上程式沒有問題問題出在下面:一運行就出現”0x00000000”指令參考的”0x00000000”記憶體.
該記憶體不能為”read”的對話框,幫忙看看是什麼原因
void CJpgTobmpDlg::OnButton3()
{ static HINSTANCE hCamDLL=NULL;
CHANGE *pFunc;
hCamDLL = LoadLibrary("jpg1.dll");
pFunc= (CHANGE*)GetProcAddress(hCamDLL,"jpgTobmp");
pFunc(m_strJpg.GetBuffer(50),m_strBmp.GetBuffer(50));
m_strJpg.ReleaseBuffer();
m_strBmp.ReleaseBuffer();
::FreeLibrary(hCamDLL);
}
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE,"jpg",NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"Jpg File(*.jpg)|*.jpg||");
if(dlg.DoModal()==IDOK){
m_strJpg = dlg.GetPathName();
UpdateData(FALSE);
}
}
void CJpgTobmpDlg::OnButton2() 選擇保存bmp路徑
{
// TODO: Add your control notification handler code here
CFileDialog dlg(FALSE,"bmp",NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"Bmp File(*.bmp)|*.bmp||");
if(dlg.DoModal()==IDOK){
m_strBmp = dlg.GetPathName();
UpdateData(FALSE);
}
}
以上程式沒有問題問題出在下面:一運行就出現”0x00000000”指令參考的”0x00000000”記憶體.
該記憶體不能為”read”的對話框,幫忙看看是什麼原因
void CJpgTobmpDlg::OnButton3()
{ static HINSTANCE hCamDLL=NULL;
CHANGE *pFunc;
hCamDLL = LoadLibrary("jpg1.dll");
pFunc= (CHANGE*)GetProcAddress(hCamDLL,"jpgTobmp");
pFunc(m_strJpg.GetBuffer(50),m_strBmp.GetBuffer(50));
m_strJpg.ReleaseBuffer();
m_strBmp.ReleaseBuffer();
::FreeLibrary(hCamDLL);
}
//DLL是否LOAD成功?
pFunc= (CHANGE*)GetProcAddress(hCamDLL,"jpgTobmp");
//函数是否能够取到?
- hInst 0x00000000
unused CXX0030: Error: expression cannot be evaluated
是load fails,那應該怎樣改啊
我已經把jpf1放在工程目錄中
運行下面,結果是fails,怎麼辦啊pFunc= (CHANGE*)GetProcAddress(hInst,"jpgTobmp");
if(NULL==pFunc)
{ AfxMessageBox(" fails",MB_OK,0);
return ;
}
引入的函数指针声明是否正确?
dll已經放到debug目录下,運行下面,結果是fails,怎麼辦啊void CJpgTobmpDlg::OnButton3()
{
UpdateData(TRUE);
HINSTANCE hInst;
CHANGE *pFunc;
hInst = ::LoadLibrary("jpg1.dll");
if(NULL==LoadLibrary("jpg1.dll"))
{ AfxMessageBox("load fails",MB_OK,0);
return ;
}
pFunc= (CHANGE*)GetProcAddress(hInst,"jpgTobmp");
if(NULL==pFunc)
{ AfxMessageBox(" fails",MB_OK,0);
return ;
}
pFunc(m_strJpg.GetBuffer(50),m_strBmp.GetBuffer(50));
m_strJpg.ReleaseBuffer();
m_strBmp.ReleaseBuffer();
::FreeLibrary(hInst);}
if(NULL==LoadLibrary("jpg1.dll"))
{ AfxMessageBox("load fails",MB_OK,0);
return ;
}
函数是可以导出,大小沒有錯
char path[128] = {0};
GetModuleFileName(NULL, path, sizeof(path));
char *p = strrchr(path,'\\');
memset( *(p + 1), 0, sizeof(*(p+1)) );
strcat(path, "jpgl.dll");
hInst = Loadlibrary(path);
if( hInst == NULL )
{
AfxMessageBox("加载dll错误!");
return ;
}
pFunc= (CHANGE*)GetProcAddress(hInst,"jpgTobmp");
if(NULL==pFunc)
{
AfxMessageBox("GetProc fails");
FreeLibrary(hInst);
return ;
}
pFunc(...);
GetModuleFileName(NULL, path, sizeof(path));
char *p = strrchr(path,'\\');
memset( *(p + 1), 0, sizeof(*(p+1)) );
strcat(path, "jpgl.dll");
hInst = Loadlibrary(path);
if( hInst == NULL )
{
AfxMessageBox("加载dll错误!");
return ;
}
pFunc= (CHANGE*)GetProcAddress(hInst,"jpgTobmp");
if(NULL==pFunc)
{
AfxMessageBox("GetProc fails");
FreeLibrary(hInst);
return ;
}
pFunc(...);
error C2664: 'memset' : cannot convert parameter 1 from 'char' to 'void *'
改成
*(p+1) = 0;
或者*(p+1) = 0;用法就这样,具体对没对没仔细看。
改成*(p+1) = 0;以後是
加载dll错误
memset((p+1), 0, sizeof(p+1) );
加载dll 错误???
是不是dll文件不存在?要么dll被破坏,从别处令拷贝一个试试