主题:【求助】问个Visual C++的问题 -- 香山居士
跟remote desktop connection 有关。
俺用的是Visual Studio 2005,code不是俺写的,俺只是debug。
问题在这行code,createArgs是个pointer。
m_pAppHub = pplicationHubFactory::NewInstance(createArgs);
如果我在本地机上(Windows XP)build,run,一点问题都没有。如果我用另一台机子(Windows Vista)通过remote desktop connection 联这台机子,build没问题,run到这行就会产生
An unhandled exception of type 'System.TypeInitializationException'
我查过,在两种状况下运行时createArgs里面各个component的值完全相同。我在网上google了两天,不得要领。
谢谢大家了。
vs2005这么新的东东可是没碰过。
make a guess?
应该就可以了的
根据java的handle所有exception理论。
改不了。
看看在两种情况下是否调用同样的函数库.
http://www.codeproject.com/KB/DLL/displayloadedmodules.aspx
远程桌面有没有使用一些本地的界面功能?看起来像一个Vista的漏洞.用看另一个XP远程联结XP来看看,是否问题依然存在。
我没用过Vista, 这只是我的推测.
从error message里面知道 exception 的类型是 'System.TypeInitializationException'
在程序中,是这一行 m_pAppHub = pplicationHubFactory::NewInstance(createArgs); 产生的这个exception
那么把它包到try catch里面就算是handle了
try{
m_pAppHub = pplicationHubFactory::NewInstance(createArgs);
}
catch(System.TypeInitializationException e){
// 随便干点啥或者啥也不干
}
C++我不熟,以上推测全部来自java,希望有所帮助。
你这个程序用到了什么第三方的库,在你本机启动的时候,这个库的路径被加到了Path里,所以运行没问题
远程的时候,启动配置文件可能不一样,这个路径没有加进来,程序找不到
有没有考虑com的marshal,unmarshal问题,中文一般是叫列集,散列吧。好像如果要在不同的套间之间传递com接口指针,是要marshal,unmarshal的。
我这只是一种参测。
System.TypeInitializationException似乎是一个.net framework的异常,所以我怀疑中间调用了c#的code,如果是c++的异常,那么至少也应该是'System::TypeInitializationException'。你可以从这个方向上去看。
你这个application多半调用了某个没有full trust的assembly,所以远程运行的时候会出问题。