我找到了一种直接从VBA宏调用.NET 2代码的方法:
Dim clr As mscoree.CorRuntimeHost
Set clr = New mscoree.CorRuntimeHost
clr.Start
Dim domain As mscorlib.AppDomain
clr.GetDefaultDomain domain
Dim myInstanceOfDotNetClass As Object
Set myInstanceOfDotNetClass = domain.CreateInstanceFrom("SomeDotNetAssembly.dll", "Namespace.Typename").Unwrap
Call myInstanceOfDotNetClass.ExecuteSomeDotNetMethod
Run Code Online (Sandbox Code Playgroud)
(为了使这段代码工作,我想在Excel中使用工具 - >引用...将对mscoree.tlb和mscorlib.tlb的引用添加到Excel VBA)
但这仅适用于.NET CLR 2程序集,最高可达.NET Framework 3.5版.
现在我需要使用.NET 4.
我已经了解.NET CLR4引入了另一种与版本无关的创建运行时实例的方法,我还发现了一个用C++编写的相当简单的代码示例:http: //dev.widemeadows.de/2014/02/ 04 /托管最净-4-运行时在-一个天然过程/
但是我的Excel VBA技能还不足以将这几行代码转换为工作的VBA makro.有人能帮帮我吗?
阅读:我正在回答我自己的问题,因为它将来会帮助其他人.
我收到错误:
程序集"C:\ XYZ.dll"无法转换为类型库.处理"XYZ"时,类型库导出器遇到错误.错误:找不到元素.
以下是导致问题的代码:
[Guid("7a4e9867-96a7-43f0-9492-0327b9053853"),
ClassInterface(ClassInterfaceType.None)]
public class TimeSeriesPoint
{
public string Date { get; set; }
public float Value { get; set; }
}
[Guid("7a4e9867-96a7-43f0-9492-0327b9053853"),
InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IDataHelper
{
//RCOMServerLib.IStatConnector Connector { set; }
string Text { set; }
void DoCallback();
Run Code Online (Sandbox Code Playgroud)