中国工商银行代发工资试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 10

中国工商银行代发工资试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 10,第1张

解决方法:

C/S

运行C/S程序比较简单,直接在Build C/S程序的时候显式指定为X86(64位系统默认为X64)就可以了。

B/S

运行B/S稍稍复杂点。在建立网站的时候,又分为两种情况。

A:建立的是“项目”:这个时候跟 C/S 的处理是一样。

B:建立的是“网站”:只需要修改IIS的配置就可以了。

i)“cscript %systemdrive%/inetpub/adminscripts/adsutilvbs set w3svc/appPools/enable32bitapponwin64 1”

(enable32bitapponwin64为1代表可运行32位应用程序),该项可以通过 “命令行”执行一次。(此命令的作用是使IIS能够注册32位的net FW)

ii)64位OP默认是在IIS下注册了64位的net Framework的,因此还必须再注册一个32位的net Framework

C:/WINDOWS/MicrosoftNET/Framework/v2050727> aspnet_regiisexe -i

snaptube怎么安装不了您好亲,1最常见的就是,未知软体安装失败。这个也只要在手机安全设置里面设置就可以了。2安装软件提示内存不足。如果手机内存实在不给力,又想安装多一点程序,那就把很久不用的应用程序删除卸载。3系统本限制。如果手机系统本较低,就有可能出现无法安装或安装失败的情况,所以定期更新手机系统本也能有效避免此类问题。4软件格式不正确。如果使用电脑下载手机软件时选错软件格式,同样会出现软件安装失败的情况,如果安应用失败,建议在正规手机应用商店进行下戴安装,以避免软件安装失败等问题,希望可以帮到您哦。

方法一:

在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi

st\Debug_NonRedist\x86\MicrosoftVC80DebugCRT 下找到了下列文件: msvcm80ddll

msvcp80ddll

msvcr80ddll

MicrosoftVC80DebugCRTmanifest 把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。 其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识! 方法二:

修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。 方法三: 工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”

这样生成的exe文件应该就可以在其他机器上跑了。 方法四: 你的vc8安装盘上找到再分发包vcredist_xxxexe和你的程序捆绑安装 C#调用c++制作的DLL时,一些参数的赋值问题如char ,结构体 c++ dll中的原型

int test(char xm,char fa,UINT &VerNum,double Mile,char SurvMile);

c#调用时

[DllImport(@"Test2DLL")]

public static extern int test(string xm,string fa,ref UInt32 VerNum,double Mile, StringBuilder SurvMile);

注意:

1调用的时候,有部分char ,如果想获得返回值,不能用string 作参数来进行调用,这样得不到返回到结果,可以用StringBuilder来声明变

StringBuilder strMyTemp = new StringBuilder(256);//256是长度

2结构体的引用传递

首先在c#中定义和c++相同的结构体,如果是引用传递,在结构体前面加上[In, Out]

[DllImport(@"testdll")]

public static extern int test([In, Out] SLineData[] lndt,ref UInt32 length);

3其他的类型如整形等等用ref加上数据变量则可获得返回值

使用C++调用C#的DLLSwfDotNet是C#编写的,作者的C#水平,真是令我佩服。这是个特别好的读写Swf文件的库。但是,我要用在C++项目中,怎么让C++调用C#的DLL呢。今天一上午都在琢磨这个问题,耽误了很多时间,原因是编译是出现:

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。

接着就是一大堆的0x01等等。自己做了个Sample,仔细分析发现还是自己没有搞清楚。正确的 *** 作如下:

1 创建C# DLL,需要指定应用类型为“类库”,代码:

namespace CSLib

{

public class Class1

{

private string name; public string Name

{

get

{

return name;

}

set

{

name = "Your Name: " + value;

}

}

}

}2 C++客户程序,是个控制台应用,代码:

#using "\debug\CSLibdll"

using namespace CSLib;int _tmain(int argc, _TCHAR argv[])

{

Class1 ^c = gcnew Class1(); c->Name = "zzj"; printf("%s\n", c->Name); return 0;

}3 几点要记住:

1 使用#using引用C# DLL,而不是#include。我就是想当然的使用了后者,所以浪费了一上午的时间;

2 别忘了using namespace CSLib;

3 使用C++/clr语法,采用正确的访问托管对象,即:使用帽子'^',而不是星星''(选择菜单[项目]->[属性],在其[属性页]中的[公共语言运行库支持]项)

首先总结一下“由于应用程序配置不正确,应用程序未能启动”这类问题出现的原因:

在Windows XP SP2以后,Windows引入了Side-by-Side执行的概念,这个概念本来是NET提出来的,但是Windows后来将这个概念集成到 *** 作系统层面上来了。大家都应该知道Dll Hell的问题,为了解决Dll Hell问题,Side-By-Side提出不同版本的dll文件可以同时存在于同一个系统里面,而且依赖于不同版本dll的应用程序在运行的时候可以使用到它当初被编译生成的dll。举个例子:

1、假定编写了一个C++程序A,是使用MFC 80(这个版本是随着Visual Studio 2005)发布的。

2、之后机器升级了Visual Studio的版本,从2005升级到2008,2008的MFC库是90版本的,这个时候 *** 作系统里面安装了两个版本的MFC,分别是80和90。

3、用Visual Studio 2008编写了另外一个C++程序B,B依赖与MFC 90。

4、如果运行程序A的话, *** 作系统会将MFC 80加载到A的进程里面。

5、如果这时同时运行程序B, *** 作系统会将MFC 90加载到B的进程里面。这就是Side-by-side的执行概念。

*** 作系统之所以能够这样做,是因为它在加载程序A和B之前,除了查看PE格式里面A和B所依赖的Dll信息,都会查看A和B的manifest文件。Manifest文件保存了Windows可执行文件(包括exe和dll文件)要运行起来的环境设置信息,文件名一般是可执行文件的文件全名加上manifest。例如notepadexe的manifest文件就应该是notepadexemanifest。另外有的程序将manifest文件直接嵌入到可执行文件的资源里面了,这也就是为什么有的时候看不到程序的manifest文件的原因。通常来说,一个manifest文件的内容大致如下:

<xml version='10' encoding='UTF-8' standalone='yes'>

<assembly xmlns='urn:schemas-microsoft-com:asmv1' manifestVersion='10'>

<trustInfo xmlns="urn:schemas-microsoft-com:asmv3">

<security>

<requestedPrivileges>

<requestedExecutionLevel level='asInvoker' uiAccess='false' />

</requestedPrivileges>

</security>

</trustInfo>

<dependency>

<dependentAssembly>

<assemblyIdentity type='win32' name='MicrosoftVC90DebugCRT' version='90210228'

processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />

</dependentAssembly>

</dependency>

</assembly>

上面的例子里面,就说明这个程序依赖于CRT 90,而且是调试版的,CPU架构是32位的CPU。对于将manifest文件嵌入到资源文件的程序也有办法看到manifest的信息。

1、一种是使用mtexe(Visual Studio自带的manifest处理程序):

mt -inputresource:testexe;#1 /out:testmanifest

2、另外一种是使用dumpbin程序将整个exe的内容打印到一个文件,然后用文本编辑器打开,搜索Assem字符串样式就能找到manifest信息:

知道了程序依赖于具体哪一个dll以后,可以将所依赖的dll拷贝到程序的安装文件夹里面,以CRT库绑定失败为例,介绍解决步骤:

1、从上例中知道程序依赖的MicrosoftVC90DebugCRT库,版本号是90210228,需要32位机器版本的CRT。这个依赖项一般是因为程序是调试版,所以Visual Studio在编译的时候,将调试版的CRT加入程序的依赖项。

2、从Visual Studio的安装文件夹里面将D:"Program Files"Microsoft Visual Studio 90"VC"redist"Debug_NonRedist"x86中的MicrosoftVC90DebugCRT整个文件夹拷贝到应用程序所在的文件夹里面,注意:

a) 如果程序依赖的是32位的CRT,则要拷贝x86文件夹里面的MicrosoftVC90DebugCRT文件夹,如果是先x64程序,则要拷贝x64文件夹里面。

b) 需要确定MicrosoftVC90DebugCRT文件夹里面的MicrosoftVC90DebugCRTmanifest文件里面保存的版本信息而程序依赖的版本信息匹配,MicrosoftVC90DebugCRTmanifest里面的版本信息大版本号一定要一致,小版本号一定要等于或者大于你程序依赖的CRT的小版本号。比如上例中,我们的程序是依赖于CRT 90210228,而MicrosoftVC90DebugCRTmanifest的版本是90307291,这样是可以的;而80307291就会有问题。如果大版本号一样,小版本号不一致的话,一个比较简单的方案就是修改程序的manifest文件,使其互相匹配就可以了。

3、如果程序不是依赖调试版本的CRT,而是release版本的CRT,直接去微软的官方网站下载一个crt redist包安装上就可以了。

以上就是关于中国工商银行代发工资试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 10全部的内容,包括:中国工商银行代发工资试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 10、华为手机snaptube,提示未经华为检测,不能安装、由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9286581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存