Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析.net tlb引用_C#_Excel_Com_Tlbexp_Vba - Fatal编程技术网

C# 解析.net tlb引用

C# 解析.net tlb引用,c#,excel,com,tlbexp,vba,C#,Excel,Com,Tlbexp,Vba,现在我正在编写一个.NETDLL,它应该可以在VBA代码(Excel、Access等)中使用。以下设置工作正常: [InterfaceType(ComInterfaceType.InterfaceIsDual)] [ComVisible(true)] [Guid(“8079e4a4-1e4b-4788-92ba-9d5b017fa9be”)//分配您自己的Guid 公共接口信息通信 { 字符串TestProp{get;set;} 字符串Login(); 字符串断开(); } [ClassInte


现在我正在编写一个.NETDLL,它应该可以在VBA代码(Excel、Access等)中使用。以下设置工作正常:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
[Guid(“8079e4a4-1e4b-4788-92ba-9d5b017fa9be”)//分配您自己的Guid
公共接口信息通信
{
字符串TestProp{get;set;}
字符串Login();
字符串断开();
}
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid(“19fd86e2-f1b9-478c-ba7a-bd76bdf19b85”)//分配您自己的Guid
[ProgId(“TestDll.Communication”)]
公共类通信:i通信
{
公共字符串TestProp{get;set;}
公共字符串登录()
{
//在这里使用BouncyCastle
返回“已登录”;
}
公共字符串断开连接()
{
// ...
返回“断开”;
}
}
通过引用生成的tlb文件,我可以正确使用属性以及Disconnect函数,但是调用Login函数会导致问题(“Excel中的file not found”messagebox),我猜这些问题与引用的BouncyCastle的使用有关

子按钮1\u单击()
Dim o:Set o=CreateObject(“TestDll.Communication”)
将值设置为字符串
value=o.Login()
MsgBox值
端接头
处理com可见库中对其他.net程序集的引用的最佳方法是什么?到目前为止,我试图向GAC注册bouncycastle,但没有成功


谢谢:)

这确实像上面建议的一个无法读取的文件: 在每个构建中,我在项目的bin目录中放置一个.txt,该目录在运行时读取。 使用我的解决方案中的dll可以找到文件,因为相对路径是我的bin目录,但是使用tlb,相对根路径是已登录windows用户的文档文件夹


有趣的是,我一直认为错误与我将dll设置为com visible:)的方式有关。

我猜测在
登录
方法中的某个地方发生异常,或者在JIT时间发生异常。要诊断此问题,我建议:1)将
Login
方法的全部内容移动到助手方法(
private string LoginHelper(){…}
)。2) 重写
Login
方法,在
try
/
catch
块中调用您的助手。以某种方式记录异常。不必在
Login()
方法中看到代码,作为起点,您可以将其包装在try/catch中,并显示包含任何异常详细信息的messagebox。使用System.Windows.Forms添加
到类中,并在方法
中尝试{your code;}catch(异常e){MessageBox.Show(e.ToString());}
。除此之外,创建一个WinForms或WPF应用程序作为一个测试shell,其中包含一份您可以运行的方法副本,以便进行更好的测试。谢谢。尝试捕获并返回异常。ToString()是个好主意!