我想只用一次调用编译一个C++项目,WinExec以便用一些命令行参数启动另一个可执行文件.我不知道,指定在我的项目,以获得产生,无需微软并排侧的DLL,我不希望有安装我的目标系统上工作的可执行什么设置.任何提示?
症状是一个无法启动的应用程序,以下事件被写入应用程序日志(从法语自由翻译):
Error, SideBySide, event #33
Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" cannot be found.
Run Code Online (Sandbox Code Playgroud)
更新:我知道使用WinExec是不好的做法,但它就像一个魅力,微软不可能在任何未来的API版本中删除它,不是吗?
我编写了一个非常简单的控制台应用程序,它只是使用以下代码下载文件:
System.Net.WebClient web = new System.Net.WebClient ();
web.DownloadFile ("http://www.google.com", "file.txt");
Run Code Online (Sandbox Code Playgroud)
在我以前的开发机器上,这非常快.一旦我执行了该DownloadFile方法,请求就越过了线路,响应很快就会响起.我使用ProcMon工具检查了这种行为.
然而,在切换到另一台机器之后,我发现它比我的初始开发盒要强大得多,我注意到在调用时大约5-8秒不会发生任何事情DownloadFile.使用浏览器访问相同的URL会显示几乎立即的结果.
在花了几个小时研究这个,进入.NET源代码之后,我终于放弃了System.Net.ServicePointManager.FindServicePoint踩到某种程度上不再对我有意义的地方,以及一些代理解析似乎有原因的地方.
我终于关闭了Internet Explorer 8(我运行的是Windows 7 x64)中的" Internet选项"对话框的" 局域网设置"对话框中的" 自动检测设置",而对话框中没有设置复选框.这神奇地使一切都做得非常非常快.没有更多的延迟.
好吧,我找到了一种方法来规避我观察到的问题,但如果有人可以就我的代码可能出错的地方分享一些想法,我会很高兴.我可以通过某种方式配置WebClient实例以某种方式实现相同的效果吗?
我在一个COMCTL32.DLL加载两次的进程内运行,一次使用版本5.82.7601.17514,一次使用版本6.10.7601.17514.旧版本由程序链接的一些遗留DLL加载,另一个版本由较新的DLL加载.
如果我使用GetModuleHandle (L"COMCTL32.DLL")我无法控制解决的DLL.
GetProcAddress例如,当我调用到达时,TaskDialogIndirect我得到一个空指针,这当然是因为我找回了遗留DLL的句柄.
那么,是否有一些方法可以获取地址,比如TaskDialogIndirect何时加载两个DLL.
如果没有,我可以以某种方式确保该进程加载6.10版本而不是5.82,希望我们的旧版DLL能够在较新版本的情况下正常运行COMCTL32吗?
我有一个C#winapp.我从C#应用程序调用一个原生.dll文件(由我自己创建),它工作正常.
但是当我将我的应用程序(.exe和.dll文件)复制到另一台机器时,我收到一条错误消息:
无法加载DLL"c:\ dllname.dll":找不到指定的模块.(来自HRESULT的异常:0x8007007E)
这是C#代码:
class IsoMessageHelper
{
public const string ISO8583_DLL = "c:\\Hc8583.dll";
[DllImport(ISO8583_DLL, CallingConvention = CallingConvention.Cdecl)]
public static extern bool InitializationRq(...)
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
dll ×2
winapi ×2
.net ×1
c# ×1
c++ ×1
comctl32 ×1
crt ×1
downloadfile ×1
loadlibrary ×1
proxy ×1
side-by-side ×1
webclient ×1