我現基于MFC開發了一個EXE,現在把它拷到另一個電腦上運行時提示缺少mfc100d.dll等應用程式擴展,大家有沒有好辦法解決這類問題,我的應用程式中還用到了mscomm控制元件,像這樣的EXE怎么才能在另一臺電腦上正常運行???我初涉MFC開發,對這種問題一籌莫展,希望大神指教!!!謝謝
uj5u.com熱心網友回復:
專案屬性中設定 靜態使用MFC鏈接 庫用到的控制元件一并拷貝過去, 可以簡單的弄一個批處理注冊下
uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
同2樓
uj5u.com熱心網友回復:
1,我用這種使用靜態庫的生成的方法生成了exe,到別的電腦可以打開exe了,但是串口通信有問題,不能收發數,串口通信用的是mscomm控制元件。。
2,我在另一臺裝有VC的電腦除錯我的程式,一用到串口通信的的時候就有這個錯誤:
RS.exe 中的 0x7582845d (KernelBase.dll) 處最可能的例外: Microsoft C++ 例外: 記憶體位置 0x00000000 處的 [rethrow]。
RS.exe 中的 0x7582845d (KernelBase.dll) 處最可能的例外: Microsoft C++ 例外: 記憶體位置 0x003bd7d4 處的 COleDispatchException。
實在是不知道為啥了?
3,請問您或您朋友有沒有遇到過這樣的問題,給指導一下,現在開發了exe不能在別人電腦正常運行,挺尷尬
uj5u.com熱心網友回復:
可以詳細點嗎?拷控制元件的話確實挺頭疼的,不只是mscomm的原因吧
uj5u.com熱心網友回復:
網上搜相應的DLL,拷貝到EXE目錄下,即可。uj5u.com熱心網友回復:
我也遇到過同樣的問題 改成靜態了貌似還是不行 我后來把MFC100d.dll拷貝過去了 串口控制元件類網上有個批處理 下載下來就好了 你可以打包的時候安裝下這個批處理uj5u.com熱心網友回復:
如何為“打包的時候安裝這個批處理”???謝謝,你的成功了?
uj5u.com熱心網友回復:
我在另一臺同樣是XP系統的電腦上可以打開我的exe了,但是串口通信功能不能實作,在我電腦上就沒問題。mscomm控制元件也注冊成功了,怎么還不行呢?
uj5u.com熱心網友回復:
mfc100d.dll是對應的MFC運行庫。拷貝一份放在exe同級目錄就可以了。
uj5u.com熱心網友回復:
mfc100d.dll是對應的MFC運行庫。
拷貝一份放在exe同級目錄就可以了。
我現在的情況是,不彈出缺少mfc100d.dll錯誤了。。現在是我在另一臺同樣是XP系統的電腦上可以打開我的exe了,但是串口通信功能不能實作,在我電腦上就沒問題。mscomm控制元件也注冊成功了,怎么還不行呢?感覺主要是串口控制元件的問題。。。
uj5u.com熱心網友回復:
專案、屬性、配置屬性、平臺工具集: v120_xpuj5u.com熱心網友回復:
專案、屬性、配置屬性、平臺工具集: v120_xp
我用的是2010,平臺工具集只有兩個選項v100,和v90,這種情況怎么處理呢?
uj5u.com熱心網友回復:
我也遇到過同樣的問題 改成靜態了貌似還是不行 我后來把MFC100d.dll拷貝過去了 串口控制元件類網上有個批處理 下載下來就好了 你可以打包的時候安裝下這個批處理
如何為“打包的時候安裝這個批處理”???謝謝,你的成功了?
uj5u.com熱心網友回復:
mfc100d.dll是對應的MFC運行庫。
拷貝一份放在exe同級目錄就可以了。
我現在的情況是,不彈出缺少mfc100d.dll錯誤了。。現在是我在另一臺同樣是XP系統的電腦上可以打開我的exe了,但是串口通信功能不能實作,在我電腦上就沒問題。mscomm控制元件也注冊成功了,怎么還不行呢?感覺主要是串口控制元件的問題。。。
如果是串口控制元件的未注冊的話 運行你的exe是會報錯的
uj5u.com熱心網友回復:
mfc100d.dll是對應的MFC運行庫。
拷貝一份放在exe同級目錄就可以了。
我現在的情況是,不彈出缺少mfc100d.dll錯誤了。。現在是我在另一臺同樣是XP系統的電腦上可以打開我的exe了,但是串口通信功能不能實作,在我電腦上就沒問題。mscomm控制元件也注冊成功了,怎么還不行呢?感覺主要是串口控制元件的問題。。。
如果是串口控制元件的未注冊的話 運行你的exe是會報錯的
現在打開exe很正常,沒報錯,對話框之間切換也正常,就是串口通信不行,這種情況咋整呢?
uj5u.com熱心網友回復:
推薦使用portmon軟體輔助除錯串口通信程式。uj5u.com熱心網友回復:
推薦使用portmon軟體輔助除錯串口通信程式。
朋友,你能給分析一下是什么情況嗎?我在XP系統用VS2010開發的一個用到了mscomm控制元件的exe,在我電腦(臺式)上運行正常,,,但是到了另一臺同樣是XP的臺式電腦上就不能串口通信,mscomm注冊成功了,這還能是哪些原因呢?現在真的搞不定這種問題了,新手經驗不足,還請大神給分析分析。。。謝謝
uj5u.com熱心網友回復:
可能跟DLL版本有關吧。uj5u.com熱心網友回復:
可能跟DLL版本有關吧。
裝的VS2010是一個版本,自帶的dll是一樣的,難道是電腦系統的一些dll版本不同?謝謝
uj5u.com熱心網友回復:
使用depends.exe在兩臺機器上分別查看exe依賴的dll及其版本號看看有什么不同。uj5u.com熱心網友回復:
在一臺機器上行,在另一臺機器上不行,很多時候跟版本有關系。uj5u.com熱心網友回復:
你用串口助手試下 看能不能正常收發資料
uj5u.com熱心網友回復:
void CSanTanGPSProgectDlg::OnCommMscomm1(){
// TODO: 在此處添加訊息處理程式代碼
VARIANT variant_inp;
COleSafeArray safearryay_inp;
long len, k;
unsigned int data[1024] = {0};
byte rxdata[1024];
CString stremp;
CString m_RecevieCmd = _T("");
CString m_EditReceive = _T("");
if(m_mscomm.get_CommEvent() == 2)
{
Sleep(80);
variant_inp = m_mscomm.get_Input(); //讀緩沖區
safearryay_inp = variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數
len = safearryay_inp.GetOneDimSize(); //得到有效資料長度
// 接受資料
for(k=0;k<len;k++)
{
safearryay_inp.GetElement(&k,rxdata+k); //轉換為BYTE型陣列
}
Sleep(1);
for (k = 0; k < len; k++)
{
if (!m_bConnect)
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%c", bt); //將字符送入臨時變數strtemp存放
m_EditReceive += stremp;
}
else
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%02X ", bt); //十六進制
m_EditReceive += stremp;
}
}
}
if (!m_bConnect)
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%c", bt); //將字符送入臨時變數strtemp存放
m_EditReceive += stremp;
}
else
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%02X ", bt); //十六進制
}
這一段 你要字符的就用上面的 十六進制的 就else里面的陳述句
uj5u.com熱心網友回復:
你用串口助手試下 看能不能正常收發資料
用串口助手沒問題,,,
uj5u.com熱心網友回復:
void CSanTanGPSProgectDlg::OnCommMscomm1()
{
// TODO: 在此處添加訊息處理程式代碼
VARIANT variant_inp;
COleSafeArray safearryay_inp;
long len, k;
unsigned int data[1024] = {0};
byte rxdata[1024];
CString stremp;
CString m_RecevieCmd = _T("");
CString m_EditReceive = _T("");
if(m_mscomm.get_CommEvent() == 2)
{
Sleep(80);
variant_inp = m_mscomm.get_Input(); //讀緩沖區
safearryay_inp = variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數
len = safearryay_inp.GetOneDimSize(); //得到有效資料長度
// 接受資料
for(k=0;k<len;k++)
{
safearryay_inp.GetElement(&k,rxdata+k); //轉換為BYTE型陣列
}
Sleep(1);
for (k = 0; k < len; k++)
{
if (!m_bConnect)
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%c", bt); //將字符送入臨時變數strtemp存放
m_EditReceive += stremp;
}
else
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%02X ", bt); //十六進制
m_EditReceive += stremp;
}
}
}
if (!m_bConnect)
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%c", bt); //將字符送入臨時變數strtemp存放
m_EditReceive += stremp;
}
else
{
BYTE bt = *(char*)(rxdata + k); //字符型
stremp.Format("%02X ", bt); //十六進制
}
這一段 你要字符的就用上面的 十六進制的 就else里面的陳述句
我的程式在XP上已經調通,這段程式和你的基本一致,在我電腦上生成的exe也能正常使用了,,,現在的情況是我的exe在另一臺電腦上能打開但是串口通信有問題,沒有資料過來,,,這是啥原因,,,能分析分析嗎?各位
uj5u.com熱心網友回復:
使用depends.exe在兩臺機器上分別查看exe依賴的dll及其版本號看看有什么不同。
我看了,用到的dll確實都有,有幾個版本不同的和MFC沒關系,都是提示正在使用不能修改的,,,你看還有其他原因嗎/?
我現在把exe放到win7電腦上只能打開,一用到串口通信就不行,根本沒有資料回傳到我的視窗,,,這頭疼了,mscomm控制元件已經注冊成功了,啥問題啊這是????
uj5u.com熱心網友回復:
在64位Windows下:64位exe和dll在目錄c:\windows\system32目錄下;
32位exe和dll在目錄c:\windows\syswow64目錄下;
所以要注意:
在win64位系統下注冊32位ocx或dll需要將32位ocx或dll拷貝到c:\windows\syswow64\目錄下。
且注冊要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
uj5u.com熱心網友回復:
如果在win7上,再看看管理員運行是不是可以uj5u.com熱心網友回復:
如果在win7上,再看看管理員運行是不是可以
試過了,除了串口通信功能其他的都能正常運行,,用的是mscomm控制元件,控制元件注冊成功了,串口可以打開,就是不收發資料
uj5u.com熱心網友回復:
在64位Windows下:
64位exe和dll在目錄c:\windows\system32目錄下;
32位exe和dll在目錄c:\windows\syswow64目錄下;
所以要注意:
在win64位系統下注冊32位ocx或dll需要將32位ocx或dll拷貝到c:\windows\syswow64\目錄下。
且注冊要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
win7系統32位,我把ocx和我認為相關的dll都拷到system32檔案夾下,并成功注冊mscomm32.ocx,除錯串口可以打開,但是不收發資料,你看還有什么原因能導致這樣呢???
uj5u.com熱心網友回復:
經過除錯,發現var=m_mscomm.get_Input();這句話執行不下去,在我開發時用的那臺電腦上就能執行,你們有遇到這種問題的嗎?給分析分析吧uj5u.com熱心網友回復:
win7系統32位,我把ocx和我認為相關的dll都拷到system32檔案夾下,32位exe和dll在目錄c:\windows\syswow64目錄下,不是systwow32下uj5u.com熱心網友回復:
win7系統32位,我把ocx和我認為相關的dll都拷到system32檔案夾下,32位exe和dll在目錄c:\windows\syswow64目錄下,不是systwow32下
我的win7是32位的,沒有systwow64,,,你說的那是在64位系統下的情況吧
uj5u.com熱心網友回復:
win7系統32位,我把ocx和我認為相關的dll都拷到system32檔案夾下,32位exe和dll在目錄c:\windows\syswow64目錄下,不是systwow32下
我的win7是32位的,沒有systwow64,,,你說的那是在64位系統下的情況吧
那你試試靜態編譯?注冊成功的話你可以先寫個單獨的小程式測驗下,那個串口通信好用不,可能你寫的那個串口程式就有問題吧
uj5u.com熱心網友回復:
安裝下vc++2010的支持庫就可以了,報這個錯主要是你運行軟體的電腦沒安裝對應的支持庫。uj5u.com熱心網友回復:
一般是件相關的dll與exe打包一起,做成一個安裝包。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/126464.html
標籤:界面
