我有一个用 C# 编写的 COM DLL。我已经尝试注册它并且它工作正常。我正在尝试免费注册使用它。
我完全遵循了 this MSDN 教程。
SideBySide DLL 源:
using System;
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: Guid("C49B4D72-DEB3-41F3-87DE-9AA0E0E99809")] //LIBID_SideBySide
namespace SideBySide
{
[Guid("1289C276-6CF8-456F-9CD3-14363BA5BEB5")] //IID_ISideBySideClass
public interface ISideBySideClass
{
string Version();
}
[Guid("16AD5303-E154-44B4-A72B-C129859714AD")] //CLSID_SideBySideClass
public class SideBySideClass : ISideBySideClass
{
public string Version()
{
return "1.0.0-C#";
}
}
}
SideBySide.manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="SideBySide"
version="1.0.0.0" />
<clrClass
clsid="{16AD5303-E154-44B4-A72B-C129859714AD}"
progid="SideBySide.SideBySide"
threadingModel="Both"
name="SideBySide.SideBySideClass" >
</clrClass>
</assembly>
应用程序 list Client.exe.manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type = "win32"
name = "client"
version = "1.0.0.0" />
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="SideBySide"
version="1.0.0.0" />
</dependentAssembly>
</dependency>
</assembly>
用法:
方法 1 是教程建议的使用 DLL 的方式。我已经探索并提出了使用激活上下文的方法 2。
方法一:
/*
Using CreateInstance
*/
int method1()
{
CoInitializeEx(0, COINIT_MULTITHREADED);
ISideBySideClassPtr ptr;
HRESULT hr = ptr.CreateInstance(__uuidof(SideBySideClass));
if (SUCCEEDED(hr))
{
cout << ptr->Version() << endl;
}
else
{
//The dialog box asking for .net framework 3.5 installation comes up here
}
CoUninitialize();
return 1;
}
方法2:
/*
Using Activation context
*/
int method2()
{
HRESULT _hr = CoInitializeEx(0, COINIT_MULTITHREADED);
if( _hr != S_OK)
{
return FALSE;
}
DWORD cookie = 0;
ACTCTX actctx;
actctx.cbSize = sizeof(ACTCTX) ;
actctx.lpSource = L"SideBySide.dll";
actctx.lpResourceName = //_T("SideBySide"); //error
MAKEINTRESOURCE(1); //This alone worked for CreateActCtx
//MAKEINTRESOURCE(2); //error
actctx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID ;
HANDLE hActCtx = CreateActCtx(&actctx);
if( hActCtx == INVALID_HANDLE_VALUE)
{
//This usually fails here.
//But with the above mentioned values this succeeds
return E_FAIL;
}
BOOL fOK = ActivateActCtx(hActCtx, &cookie);
if (!fOK)
{
return E_FAIL;
}
CComPtr<ISideBySideClass> spCSharpTest;
HRESULT hr = spCSharpTest.CoCreateInstance(__uuidof(SideBySideClass));
if (hr != S_OK)
{
//The dialog box asking for .net framework 3.5 installation comes up here
}
else
{
cout << "Load Successfully : SideBySideClass" << endl;
spCSharpTest->Version();
//Need not release. CComPtr will take care of it
}
DeactivateActCtx(0, cookie);
ReleaseActCtx(hActCtx);
CoUninitialize();
return 0;
}
问题:
当我尝试创建该类的实例并给出以下错误 0x80131700 (2148734720)(没有描述)时,这两种方法都失败了,然后我得到以下对话框提示安装 .net framework 3.5 :
我在 SideBySide C# 项目的 Properties->Application 中将“Target framework”指定为 .NET framework 4.5,并且在注册 com dll 时它可以完美运行。我不明白为什么在不注册的情况下尝试使用时会要求提供旧版本。
我应该在 list 文件中的任何位置指定 .net Framework 版本吗? 可能是什么问题呢?任何帮助将不胜感激。
最佳答案
是的,您需要在使用 .NET 4.0 或更高版本时指定运行时版本。如果服务器 list 中缺少此信息,激活上下文将查找 .NET 4.0 之前可用的最高运行时版本,即 3.5 版。
只需按如下方式添加所需的 .NET 运行时版本(注意 runtimeVersion 属性):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="SideBySide"
version="1.0.0.0" />
<clrClass
clsid="{16AD5303-E154-44B4-A72B-C129859714AD}"
progid="SideBySide.SideBySide"
threadingModel="Both"
name="SideBySide.SideBySideClass"
runtimeVersion="v4.0.30319" >
</clrClass>
</assembly>
关于c# - 注册免费 com dll 要求安装 .net framework 3.5,注册时运行正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418868/
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub