我们正在尝试将单元测试添加到遗留的c ++ COM应用程序中.我们还需要我们的构建机器能够破坏他的单元测试,以确保每个构建都没有引入错误.但是,我们不希望构建机器必须注册com dlls,以便一台构建机器可以并行构建多个版本.我们假设我们可以改为使用注册免费com与清单文件,但我很难让它工作.不是在我们的代码库上,而是在Microsoft提供的基本示例上.
我一直在使用这个页面http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic8
,当我尝试使用未注册的dll运行使用清单文件时,它根本不起作用,我得到"类未注册错误"
他们提供的样本工作正常(使用c ++ com服务器和c ++客户端),但是当我重建它们时它们不起作用.
我们正在使用Visual Studio 2013,所以它看起来像注册免费com的工作方式发生了很大的变化,这使得本教程与新的编译器不兼容.
任何人都可以向我指出使用最新版本的visual studio免费注册com的资源吗?当我到达那里时,为了进一步使我们自己的应用程序中的内容复杂化,我们正在使用VS 2013,但是针对2010编译器,希望这不会产生很大的差异.
此外,如果有更好的方法在com组件上运行c ++单元测试而不注册清单文件,我也希望听到这些.
谢谢你的帮助.
c++ unit-testing side-by-side visual-studio-2010 registration-free-com
我们刚刚转到VS 2010,我的解决方案运行良好.当我尝试加载解决方案时,这种早晨我得到了错误:
"已经添加了具有相同键的项目."
当它尝试加载我们的一个主项目并且未加载时会发生这种情况.
我认为问题出在我的解决方案上,所以我创建了一个全新的空解决方案并尝试加载相同的vcxproj并得到完全相同的错误.
当我将项目文件恢复到以前的版本时它可以工作,所以显然它是vcxproj文件中的东西.然而,似乎我是办公室里唯一受影响的人.因此,vcxproj文件和我的计算机的某些组合似乎是个问题.
以前有人见过这样的事吗?关于解决方案的任何想法?谢谢
我们的产品基于一堆C++项目,但我们现在正在使用C#项目作为前端.我们现在也在做64位版本.
我们的计划是将所有C#dll构建为AnyCPU.C#项目将在公共bin文件夹中引用C++ dll.构建x64时,bin文件夹将包含我们的c ++ dll的x64版本,在构建Win32时,bin文件夹将包含32位版本的C++ dll.所以C#项目将构建AnyCPU,但包括x64或Win32 c ++ dll.
我的问题是,这会有效吗?在运行时,所有应该是全部32或全部64取决于我们正在运行的exe,但是编译时可以处理一个项目,目标是包含特定于平台的dll的AnyCPU吗?或者我们是否必须制作所有C#dll的平台特定版本?谢谢
最新更新(2011年11月2日上午9点) 我尝试从服务运行tnsping,它工作!但是当我尝试连接时仍然会收到错误12154.我现在完全糊涂了,我无法理解tnsping如何正常工作但连接无法解析服务名称.
出于某种原因,当我从Windows服务运行以下代码(在计时器事件上)时,我收到错误:ORA-12154:TNS:无法解析服务名称(12154)
当我从Windows窗体应用程序运行完全相同的代码时,它连接就好了.服务和应用都在我的帐户下运行,因此帐户权限没有区别.
我很困惑为什么服务失败,有人可以对此有所了解吗?
string connectionString = ";DSN=o1;UID=SCOTT;PWD=TIGER;DBQ=ORCL;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;";
OdbcConnection cnn;
cnn = new OdbcConnection(connectionString);
try
{
cnn.Open();
myEventLog.WriteEntry("Connection SUCCEEDED!!!");
cnn.Close();
}
catch (Exception ex)
{
string mes = "Connection FAILED!!!" + ex.Message;
myEventLog.WriteEntry(mes);
}
Run Code Online (Sandbox Code Playgroud)
更新:
1)我尝试过系统和用户dsn,两者都有相同的行为
2)我在系统环境变量中添加了一个TNS_ADMIN,以便它可以找到tnsnames.ora文件.这并未改变行为.
新更新(2011年11月1日):
1)许多建议都涉及将Oracle服务器的ip地址放在连接字符串中以绕过tnsnames.ora文件.不幸的是,应用程序必须使用用户设置oracle连接,因此我们没有任何这些信息.我必须与之合作的是DSN.我必须使用Oracle DSN从Windows服务进行连接.
新更新(2011年11月2日):1)看起来服务IS成功读取了tnsnames.ora文件.我运行了进程监视器并得到了这些行:
7:52:54.4365217 AM OracleService.exe 4624 CreateFile C:\oracle\ora92\network\Names\sdns.ora NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a
7:52:54.4368466 AM OracleService.exe 4624 CreateFile C:\Windows\SysWOW64\tnsnames.ora NAME NOT FOUND Desired …Run Code Online (Sandbox Code Playgroud) 我们的应用程序在非unicode版本中有一个错误; 如果我们将一些俄罗斯字符复制到剪贴板(使用SetClipboardData(CF_TEXT)),然后将它们粘贴到记事本中,它们不会被粘贴为俄语字符,而是作为代码页1252当量(例如Э变为Ý).
在尝试解决这个问题时,我为粘贴制作了一个小测试应用程序,如果我使用GetClipboardData(CF_TEXT),它的工作正常.但是,如果我使用GetClipboardData(CF_UNICODETEXT),它与记事本完全相同.
所以我假设记事本只是在粘贴上使用CF_UNICODETEXT.根据我读过的MS文档,剪贴板应该能够将CF_TEXT转换为CF_UNICODE文本.实际上在页面上:
http://msdn.microsoft.com/en-us/library/ms649013.aspx#_win32_Synthesized_Clipboard_Formats
它说"将转换格式放在剪贴板上没有任何好处."
如果这是真的那么我必须(我希望)犯一个容易纠正的简单错误.
任何人都可以帮我解决这个问题吗?谢谢
windows unicode clipboard internationalization character-encoding
我正在寻找一种简单的方法来获取某一天检查过的文件列表.我可以使用命令行吗?我不希望变更集只是文件名.
我将我们的32位Windows应用程序移植到64位,并尝试清除所有警告.我在我们的代码中发现了对CDC :: GetTextExtent的调用,它将int作为参数.
我注意到GetTextExtent只是调用GetTextExtentPoint32.32让我害怕,所以我开始寻找64位版本的GetTextExtent,但我找不到一个.
谁能告诉我GetTextExtent在64位完全安全?还是有其他方式我们应该获得这些信息?
谢谢
c++ ×2
windows ×2
32bit-64bit ×1
64-bit ×1
c# ×1
clipboard ×1
command-line ×1
loading ×1
oracle ×1
platform ×1
side-by-side ×1
tfs2010 ×1
unicode ×1
unit-testing ×1