虽然c#不是我的主要编程语言,但我现在正在维护这样一个程序几年.此程序连接到串行端口上的设备,从Windows XP到8.1.一个特定的"功能"是它使用.NET Framework 2.0.
有些用户升级到Windows 10,我们抱怨程序无法检测/打开设备的COM端口.我们已在我们自己的测试系统上确认了这一点,并安装了干净的Win10
事实证明,函数SerialPort.GetPortNames()返回错误的端口名称,并在端口名称后添加"奇怪"字符.例如:
等等.当我刷新列表时,每次在数字后面显示另一个字符(或两个).测试代码非常简单:
string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
log("Available ports:");
foreach (string PortAvailable in portNames)
{
log(PortAvailable);
}
Run Code Online (Sandbox Code Playgroud)
日志函数会在窗体上向标准TextBox添加一行:
txtLog.Text += Msg + Environment.NewLine;
Run Code Online (Sandbox Code Playgroud)
这适用于所有其他Windows版本.我检查了注册表,所有看起来都很好.有没有人对此有所了解?
我怀疑.NET Framework 2.0不再100%兼容,虽然您可以在Windows功能中启用它,但似乎程序本身运行正常(除了我的串口问题).我有点害怕升级到更新的.NET,更不用说我们用Visual Studio 2008 for c#(max = .NET 3.5).请注意,程序仍然需要在Windows XP上运行(POS版本仍由Microsoft维护).
补充:我已经将测试程序"升级"为.NET 3.5,并且仍然存在完全相同的问题.下一步是安装一个新的VisualStudio(它现在似乎是免费的?我应该检查Studio中的隐私设置吗?;-).
增加2:安装了VisualStudio 2015,并使用不同的.NET框架版本进行了多次构建.v2.0和3.5仍然添加了奇怪的字符.但是在v4.0及以上这个问题似乎已经解决了!现在,为原始程序编译并为更新的Framework工作.但是我觉得这个问题真的很奇怪,并且预计会有更多.NET功能和更多程序.
我有一个CDHTMLDialog,我有2个HTML页面和一个.js文件,有一些相当简单的功能.
我希望能够从我的程序中调用一个JS函数,并使用它传递一个简单的数据类型.例如MyFunc(int).什么都不需要退货.
我很感激任何有关我如何做到这一点的指导,
谢谢.
编辑:感谢CR的答案,以及其他提交了这些想法的人.
有点像这样的东西最终起作用(为了清晰起见剥离了一点错误处理):
void callJavaScriptFunc(int Fruit)
{
HRESULT hRes;
CString FuncStr;
CString LangStr = "javascript";
VARIANT vEmpty = {0};
CComPtr<IHTMLDocument2> HTML2Doc;
CComPtr<IHTMLWindow2> HTML2Wind;
hRes = GetDHtmlDocument(&HTML2Doc);
hRes = HTML2Doc->get_parentWindow(&HTML2Wind);
if( Fruit > 0 )
{
FuncStr = "myFunc(808)"; // Javascript parameters can be used
hRes = HTML2Wind->execScript(FuncStr.AllocSysString(), LangStr.AllocSysString(), &vEmpty);
}
}
Run Code Online (Sandbox Code Playgroud)