如何设置VS 2017 C#以制作.dll以供Access 2016参考

已加入
2019年11月5日
留言内容
10
编程经验
5-10
敬启者,

有谁知道如何设置VS 2017 C#项目来制作用于Access 2016的.dll,以便通过Tools->references?

我尝试了许多不同选项的组合,但无济于事。我需要在MS Access VBA中访问System.Net.Sockets中的一个功能。

如果在此处发布的位置不合适,请告知位置。

谢谢,

伊万
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
目前尚不清楚您到底要达到什么目标。如果只想连接到Access数据库,则不需要引用任何内容,但是需要为ACCDB文件安装ACE数据库引擎。如果要自动化Access应用程序,则需要引用适当的Office对象库,就像处理Word或Excel一样。如果您还需要其他内容,则需要进行解释。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
这OP wants to write VBA code and then use VBA's Tools.References...
Capture.png

Capture2.png


设置VS2017无关紧要。这是编写福彩12选5走势图以使其暴露COM对象的问题。

看:
示例COM类
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
已加入
2019年11月5日
留言内容
10
编程经验
5-10
感谢您的答复兄弟!

我尝试了您的建议,但返回了以下编译器错误:

严重性福彩12选5走势图说明项目文件行抑制状态
错误无法注册类型库"C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.tlb"。访问OLE注册表时出错。 (来自HRESULT的异常:0x8002801C(TYPE_E_REGISTRYACCESS))ClassLibrary9



严重性福彩12选5走势图说明项目文件行抑制状态
警告"C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.dll"不包含可以为COM Interop注册的任何类型。 ClassLibrary9


这是福彩12选5走势图(我只是编写此简单福彩12选5走势图以获取从Access到VS2017 C#.dll的连接):

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Text;
使用System.Threading.Tasks;

命名空间ClassLibrary9
{
公共静态类Class1
{
公共静态double Add(double num1,double num2)
{
return num1 + num2;
}

}
}


为什么要这么难?

我的用户帐户具有本地管理员权限,所以我不知道为什么出现第一个错误

我也不知道为什么我得到了第二名。

我要做的就是能够在Access VBA环境中运行在VS2017中的.dll中编写的福彩12选5走势图。

谢谢,

伊万
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
我只是将第二条错误消息的末尾复制到搜索引擎中,并且在将属性应用于类型以使其能够为COM Interop注册时获得了多个相关结果。
 
已加入
2019年11月5日
留言内容
10
编程经验
5-10
目前尚不清楚您到底要达到什么目标。如果只想连接到Access数据库,则不需要引用任何内容,但是需要为ACCDB文件安装ACE数据库引擎。如果要自动化Access应用程序,则需要引用适当的Office对象库,就像处理Word或Excel一样。如果您还需要其他内容,则需要进行解释。
不,我不想将Access数据库连接到VS C#,我想将C#.dll连接到通过工具访问->参考。尽管我仍然无法听取他的建议,但约翰·H的说法大致相同
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
不,我不想将Access数据库连接到VS C#,我想将C#.dll连接到通过工具访问->参考。尽管我仍然无法听取他的建议,但约翰·H的说法大致相同
您没有特别提到要在Access中创建连接。对我而言,这没有发生,但显然还有其他人对该过程更熟悉。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+
错误无法注册类型库"C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.tlb"。访问OLE注册表时出错。
该错误是因为您没有以提升的权限运行。
不,我不想将Access数据库连接到VS C#,我想将C#.dll连接到通过工具访问->References.
也许您在描述将来要做什么时应该更加清楚。如果他们误解了你,那不是谁的错。假设每个人都应该知道您在写什么或在想什么,这是您自己的错。虽然我也很了解您的意思,但我以前没有打扰过,因为我不会打扰您的含糊要求。如果您确切地解释了您想做什么,那么您会从社区中获得更好的反馈。

最后,这不是要发布的正确论坛,可以在将福彩12选5走势图发布到论坛时使用福彩12选5走势图标签。

谢谢
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
我尝试了您的建议,但返回了以下编译器错误:

严重性福彩12选5走势图说明项目文件行抑制状态
错误无法注册类型库"C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.tlb"。访问OLE注册表时出错。 (来自HRESULT的异常:0x8002801C(TYPE_E_REGISTRYACCESS))ClassLibrary9
该错误是因为您没有以提升的权限运行。
注意您必须以管理员身份运行VS才能进行注册。
右键单击VS开始图标,然后单击"Run as administrator".
严重性福彩12选5走势图说明项目文件行抑制状态
警告"C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.dll"不包含可以为COM Interop注册的任何类型。 ClassLibrary9
那就是使"使组件COM可见"是为了,我也指出了您。
1573029769914.png
或者
1573029893933.png
 
已加入
2019年11月5日
留言内容
10
编程经验
5-10
道林斯先生,

感谢您的回应!是的,我是新来的,感谢我的新手。

"该错误是因为您没有以提升的权限运行。"
-好的,我要感谢你

"也许您在描述将来要做什么时应该更加清楚。如果他们误解了你,那不是谁的错。"
-没有责任要分配。如果我不清楚,我要接受所有的责备。对不起,如果不是。当然,如果他们不了解我,那不是任何人的错。

"假设每个人都应该知道您在写什么或在想什么,这是您自己的错。"
-我从来没有做过这样的假设。另外,有一个隐含的假设,即我感到不高兴或某事,而我不是。我怎么会这样你们真棒!都很好!

"虽然我也很了解您的意思,但我以前没有打扰过,因为我不会打扰您的含糊要求。"
- 是的。完全同意。或者您可以要求澄清。因为无知问题的一部分,所以人们在这里要解决的问题是,有时不知道也意味着不知道确切问些什么。

最后,这不是发布的正确论坛,"
-请告知在哪个论坛发布此问题,以及是否有办法将该线程迁移到那里。谢谢。对于那个很抱歉。

"您可以在将福彩12选5走势图发布到论坛时使用福彩12选5走势图标签吗?"
-Wuts福彩12选5走势图标签

谢谢
[/引用]
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+
或者您可以要求澄清。
您是否知道我每天在此论坛和其他论坛上问这个问题多少次。
有时不知道也意味着不知道要问什么。
我不同意。如果您有问题,请说明您的问题。如果您不知道问题所在,那么请详细说明您在做什么。你是怎么做的。以及您所经历的是什么使您复杂化。表达您确实遇到或遇到的问题没有涉及科学或火箭科学。在那儿?
请告知发布此论坛的论坛
没有与vb6相关的问题的小节。但是这个论坛是针对VS的,这使得它不相关。也许是C#子论坛之一,甚至是C#一般讨论。
Wuts code tags
这些是福彩12选5走势图标签:
[CODE=csharp] Put your code here [/CODE]
它们有助于保持您福彩12选5走势图的格式和缩进,这使我们更易于阅读,因此请以后使用福彩12选5走势图标签发布您的福彩12选5走势图。笑脸旁边的帖子编辑器上有三个...点。单击它,然后单击福彩12选5走势图标签,然后将福彩12选5走势图粘贴到弹出的框中。

您完成上述工作了吗?

顺便说一句,欢迎来到论坛。
 
已加入
2019年11月5日
留言内容
10
编程经验
5-10
右键单击VS开始图标,然后单击"Run as administrator".

那就是使"使组件COM可见"是为了,我也指出了您。
查看附件695 或者 查看附件697
约翰先生

感谢回复!那很棒。好吧,我做了管理员的事情,就像你和佩林斯先生说的那样,这对于消除错误非常有效,但是警告,

"warning MSB3214: "C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.dll"不包含可以为COM Interop注册的任何类型。",

仍然存在,我认为我还有其他设置或陈​​述;(显然)缺少。我确定您知道答案!

谢谢,

伊万
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
如果我没记错的话,静态类不能公开给COM。这是因为COM类工厂需要实例化一个类。
 
已加入
2019年11月5日
留言内容
10
编程经验
5-10
道林斯先生,

是的,正如我们的建议所提到的,管理员右键单击的东西确实可以解决该错误,但是仍然存在警告问题,

"warning MSB3214: "C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.dll"不包含可以为COM Interop注册的任何类型。",

我记得在构建属性页面上被告知的其他构建设置"注册COM Interop",但是显然仍然缺少某些东西,也许有些类似于指令的东西。

我知道你知道这是什么,所以...

谢谢,

伊万
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,979
地点
英国
编程经验
10+
嗯,我没有关注,我在这里冒烟(本周许多深夜),所以...
这 :
错误无法注册类型库"C:\ Users \ GL552V \ source \ repos \ ClassLibrary9 \ ClassLibrary9 \ bin \ Debug \ ClassLibrary9.tlb"。访问OLE注册表时出错。
是通过使用提升的权限修复的吗?

如果那是正确的,那么注册应该起作用。另外,请确保您使用的是各自的regasm版本,因为有32位和64位。您还可以在注册时检查注册表或写文件日志,其中显示了注册详细信息。


写日志,告诉我们您得到什么。您很可能需要从这里获得Skydiver和JohnH的帮助,因为我对owl vb的了解大多已逐渐消失。所以我在这里不会对您有用。
 
Last edited:

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
如果我没记错的话,静态类不能公开给COM。
没错,请使用常规方法(非静态方法)创建常规类。
This :
错误无法注册类型库
是通过使用提升的权限修复的吗?
真的。
另外,请确保您使用的是各自的regasm版本,因为有32位和64位
这"Register for COM"选项在构建项目时自动在开发机器上注册COM库。如果部署,则需要regasm.exe。
作为Office COM库,如果Office以32位安装,则必须将其构建为x86(32位),反之亦然。
 
已加入
2019年11月5日
留言内容
10
编程经验
5-10
是的,提升的权限解决了该错误,现在我得到了警告,提示没有添加任何类型的接口类和其他一些东西,如下所示,因此福彩12选5走势图现在看起来像这样:

C#:
使用系统;
使用System.Collections.Generic;
using System.Linq;
using System.Text;
使用System.Threading.Tasks;


命名空间ClassLibrary9

{



    //[Guid("<PUT-GUID-HERE-1>")]
    //[ComVisible(true)]
    //[ProgId("ClassLibrary9")]
    // These are automatically generated I am told

    public interface iClass1
    {
        double Add(double num1, double num2);
    }


    public class Class1 : iClass1
    {
        public Class1() {
            int n = 1;  // some say this is needed, just ine line of code to avoid a
                        //  compiler optimization that mess up COM
        }

        public double Add(double num1, double num2)
        {
            return num1 + num2;
        }

    }

}


现在的问题是,当我尝试使用以下福彩12选5走势图在Access VBA中使福彩12选5走势图工作时,

VB.NET:
Sub bazzz()

    Dim zzz As Class1
    Set zzz = New Class1
    Debug.Print zzz.Add(1, 1)

End Sub

,则Set语句变得可怕"Automation Error" error.

有任何想法吗?
 
已加入
2019年11月5日
留言内容
10
编程经验
5-10
嗯,我没有关注,我在这里冒烟(本周许多深夜),所以...
这 :

是通过使用提升的权限修复的吗?

如果那是正确的,那么注册应该起作用。另外,请确保您使用的是各自的regasm版本,因为有32位和64位。您还可以在注册时检查注册表或写文件日志,其中显示了注册详细信息。


写日志,告诉我们您得到什么。您很可能需要从这里获得Skydiver和JohnH的帮助,因为我对owl vb的了解大多已逐渐消失。所以我在这里不会对您有用。

是的,提升的权限修复了该错误,我添加了一个"interface"并且我可以将其编译并加载到vba中,但是当我尝试使用它时,它变得令人恐惧"automation error"错误((请参阅上面对JohnH先生的答复)。有什么想法可能会继续吗?可能与传递值有关吗?

谢谢,

伊万
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
您确定与Office安装的位匹配吗?例如。如果您具有32位Office,则需要确保将程序集编译(并注册)为x86程序集。另一方面,如果您具有64位Office,则需要将程序集编译(和注册)为x64程序集。"Any CPU"不会削减它。

自从我不得不处理VBA以来,已经快20年了。我记得,可怕的自动化错误还提供了一种获取有关错误的详细信息的方法,例如错误福彩12选5走势图以及某种日志和/或调用堆栈。您能通过提供这些详细信息来帮助我们吗?

这只是基于我在该线程上所看到的内容得出的我的观点,但是看起来您只是掩盖了人们给您的各种答复,因此我们最终不得不重复自己。 (例如,以管理员身份运行,如何使COM可见,使用非静态类等)。如果看到不了解的内容,请提出要求。不要只是吹掉它而盲目前进。
 
最佳 底部