小弟改了一個進程內服務器的組件,主線程為MTA,但是DL 組件的
ThreadingModel="" 或 沒有 , 因此呼叫 CoGetClassObject/
CoCreateIntance[Ex]COM會自動建立Main STA(STA0),CoGetClassObject
調用得到的類場對象(proxy)沒問題,但是再調用類場的CreateIntance卻發生了 REGDB_E_IIDNOTREG 錯誤. 或是直接調用CoCreateIntance 是 E_NOINTERFACE 錯誤 , 不知是哪個環節出了錯誤 .http://support.microsoft.com/kb/150777/zh-tw 上面這個網只有指出套間與對象使用關係 , 而我上面的情況就是用戶端 伺服器 結果
------ ------ -----------------------------------------------------
MTA 無 proxy存取;伺服器載入到STA0;如果必要STA0由COM自動建立不知哪為大大能否說明上面這個模式的正確做法 , 或是我漏了哪個步驟~~代碼在此: http://myweb.fcu.edu.tw/~d9147897/InProc.rar主要是輸入2數到組件中再作相加並回傳到 client. 有問題步驟是卡在第2歨 ,
若把主線程中的CoInitializeEx(NULL,COINIT_MULTITHREADED);改成
CoInitialize(NULL); 是沒問題的 , 因為所產生的組件沒有 PROXY可以直接調用.
0. 先編譯 AddObj 產生DLL 再編譯 VCClient 執行.
1. 顯示 MTA 和 STA 線程 ID , 表示確實有2個套間存在 , MTA是由COM所建立
2. CAddObj 的確有被創建 , 但是呼叫 pFactory->CreateInstance 或
CoCreateInstance 所得到的 proxy 指針卻為 null , 問題就是在這.
3. 輸入 2數 並傳回結果在此感激不進!! 靠大家了~~
ThreadingModel="" 或 沒有 , 因此呼叫 CoGetClassObject/
CoCreateIntance[Ex]COM會自動建立Main STA(STA0),CoGetClassObject
調用得到的類場對象(proxy)沒問題,但是再調用類場的CreateIntance卻發生了 REGDB_E_IIDNOTREG 錯誤. 或是直接調用CoCreateIntance 是 E_NOINTERFACE 錯誤 , 不知是哪個環節出了錯誤 .http://support.microsoft.com/kb/150777/zh-tw 上面這個網只有指出套間與對象使用關係 , 而我上面的情況就是用戶端 伺服器 結果
------ ------ -----------------------------------------------------
MTA 無 proxy存取;伺服器載入到STA0;如果必要STA0由COM自動建立不知哪為大大能否說明上面這個模式的正確做法 , 或是我漏了哪個步驟~~代碼在此: http://myweb.fcu.edu.tw/~d9147897/InProc.rar主要是輸入2數到組件中再作相加並回傳到 client. 有問題步驟是卡在第2歨 ,
若把主線程中的CoInitializeEx(NULL,COINIT_MULTITHREADED);改成
CoInitialize(NULL); 是沒問題的 , 因為所產生的組件沒有 PROXY可以直接調用.
0. 先編譯 AddObj 產生DLL 再編譯 VCClient 執行.
1. 顯示 MTA 和 STA 線程 ID , 表示確實有2個套間存在 , MTA是由COM所建立
2. CAddObj 的確有被創建 , 但是呼叫 pFactory->CreateInstance 或
CoCreateInstance 所得到的 proxy 指針卻為 null , 問題就是在這.
3. 輸入 2數 並傳回結果在此感激不進!! 靠大家了~~
解决方案 »
- 关于CBitmap.Attach和HBITMAP的处理
- 请教, 调试时 出现 GetClientRect 出现 stack overflow 错误的问题, 如何解决 ,如能答复 万分感谢!!
- 怎样得到tree中选中的一个文件夹的名字和路径?
- 哪位大哥有發送邮件的类?
- 金山词霸是怎样在IE和Word中嵌入工具条的?象3721之类的控件是怎样实现自动安装的...
- 就求帮忙!!!! GetProcAddress 获取不到函数地址
- 如何准确知道IE被关闭了?
- 急!!!!请教一个C++问题
- 怎么改变ie地址栏里面的地址。
- 你是一个Visual C++的初学者吗?
- 自画的位图,为什么鼠标一点就消失了呢?
- 新人提问,麻烦各位大大帮看
這個步驟不是 dcom 的步驟嗎 ?還是進程內的組件也要一個 proxy/stub dll ?
proxy.dll 不就是在 InprocServer32 鍵裡 ,
而我自己的AddObj.dll組件也在 InprocServer32 鍵裡.要如何加入 proxy.dll , 還是有你只的是要將 midl 所產生
的 proxy/stub 代碼給加入 AddObj.dll ?問題白痴很不好意思^^
nmake -f AddObjectps.mk // 生成PROXY/STUB相关DLL
regsvr32 AddObjectps.dll // 将PROXY/STUB注册到注册表完成后, 你可以查看注册表, 在你定义的接口的IID下会有一个新定义的子键:ProxyStubClsid32, 通过这个子键, 就可以确定PROXY/STUB的位置, 即InprocServer32, 这样在MARSHAL接口的时候, 就不会出错了.可以将PROXY/STUB加入到AddObj.dll中, 但一般PROXY/STUB是一个独立的DLL
還有上面提到的 , 我想知道如何不產生 proxy.dll,
而直接將 proxy/stub 代碼加入 AddObj.dll 裡.再次感謝您~~