如何设置VS 2017 C#以使.dll用于访问2016参考

加入
2019年11月5日
消息
10
编程经验
5-10
敬启者,

有谁知道如何设置VS 2017 C#项目,以便使用.dll for Access 2016要通过工具使用 - >references?

我尝试了许多不同选择的组合,但只是无法获得任何工作。 System.net.sockets中有一个函数我需要在MS Access VBA中访问。

如果这不是发布此问题的正确位置,请告知它在哪里。

谢谢,

伊万
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,721
地点
悉尼,澳大利亚
编程经验
10+
这并不清楚你究竟想要实现的目标是什么。如果您只想连接到Access数据库,那么您不需要引用任何内容,但需要为ACCDB文件安装ACE数据库引擎。如果要自动执行Access应用程序,则需要引用相应的Office对象库,就像您为Word或Excel一样。如果你想要别的东西,你需要解释一下。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
这OP wants to write VBA code and then use VBA's Tools.References...
capture.png.

Capture2.png.


这不是一个设置VS2017的问题。这是写作代码的问题,以便它公开COM对象。

看:
示例com类
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
加入
2019年11月5日
消息
10
编程经验
5-10
谢谢你回复老兄!

我尝试了你的建议,我又回到了以下编译器错误:

严重性代码说明项目文件线抑制状态
错误无法注册类型库"C:\用户\ GL552V \源\ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.tlb"。访问OLE注册表时出错。 (来自hresult的例外:0x8002801c(type_e_registyAccess))classlibrary9



严重性代码说明项目文件线抑制状态
警告"C:\ Users \ gl552v \ source \ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.dll"不包含可用于COM互操作的任何类型。 ClassLibrary9.


这是代码(我只是在编写这个简单的代码来获取访问到VS2017 C#.dll的连接):

使用系统;
使用system.collections.generic;
使用system.linq;
使用system.text;
使用system.threading.tasks;

命名空间classlibrary9.
{
公共静态类Class1
{
公共静态双添加(双号,双号数字)
{
return num1 + num2;
}

}
}


为什么这么难?

我的用户帐户确实有本地管理员权利,所以我不知道为什么我有第一个错误

我不知道为什么我也有第二个。

我想做的就是能够在Access VBA Environnment中的VS2017中的一些.dll中运行编写的代码。

谢谢,

伊万
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,721
地点
悉尼,澳大利亚
编程经验
10+
我刚刚将第二个错误消息的末尾复制到搜索引擎中,并在将属性应用于类型的情况下获得多个相关结果,以使其能够为COM互操作注册。
 
加入
2019年11月5日
消息
10
编程经验
5-10
这并不清楚你究竟想要实现的目标是什么。如果您只想连接到Access数据库,那么您不需要引用任何内容,但需要为ACCDB文件安装ACE数据库引擎。如果要自动执行Access应用程序,则需要引用相应的Office对象库,就像您为Word或Excel一样。如果你想要别的东西,你需要解释一下。
不,我不想将访问数据库连接到VS C#,我想通过工具连接C#.dll来访问 - >参考。沿约翰·何地说,虽然我仍然无法让他的建议才能工作
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,721
地点
悉尼,澳大利亚
编程经验
10+
不,我不想将访问数据库连接到VS C#,我想通过工具连接C#.dll来访问 - >参考。沿约翰·何地说,虽然我仍然无法让他的建议才能工作
您没有提到您希望在访问中创建连接。这并不对我来说,但显然还有其他人更熟悉这个过程。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
错误无法注册类型库"C:\用户\ GL552V \源\ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.tlb"。访问OLE注册表时出错。
那个错误是因为你没有使用提升的权限运行。
不,我不想将访问数据库连接到VS C#,我想通过工具连接C#.dll来访问 - >References.
也许你应该有点清晰,在描述你将来想要做的事情。如果他们误解了你,这是没有人的错。这是你自己的错,假设每个人都应该知道你正在写的或想到什么。虽然我也知道你的意思,我之前没有打扰回复,因为我不能被打扰,为你的模糊要求做出假设。如果您准确地解释您想要做什么,您将从社区获得更好的反馈。

最后,这不是帖子中的正确论坛,在将代码发布到论坛时,您可以使用代码标记。

谢谢
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
我尝试了你的建议,我又回到了以下编译器错误:

严重性代码说明项目文件线抑制状态
错误无法注册类型库"C:\用户\ GL552V \源\ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.tlb"。访问OLE注册表时出错。 (来自hresult的例外:0x8002801c(type_e_registyAccess))classlibrary9
那个错误是因为你没有使用提升的权限运行。
注意您必须将VS作为管理员运行以进行注册。
右键单击VS Start图标,然后单击"Run as administrator".
严重性代码说明项目文件线抑制状态
警告"C:\ Users \ gl552v \ source \ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.dll"不包含可用于COM互操作的任何类型。 ClassLibrary9.
这就是启用的东西"让装配com可见"是的,我也指出了你。
1573029769914.png.
或者
1573029893933.png.
 
加入
2019年11月5日
消息
10
编程经验
5-10
毛茸茸,

谢谢你的回应!是的,我是新的,喋喋不休地忍受我的新朋友。

"那个错误是因为你没有使用提升的权限运行。"
- 好的ima会让那个谢谢

"也许你应该有点清晰,在描述你将来想要做的事情。如果他们误解了你,这是没有人的错。"
- 没有责备被分配。如果我不清楚,我会接受所有责任。对不起,如果我不是。当然,如果他们不理解我,那么它就不是任何问题。

"这是你自己的错,假设每个人都应该知道你正在写的或想到什么。"
- 我从未做出任何这种假设。此外,隐含的假设我不高兴或者是什么,我不是。为什么我会成为呢?你们很棒!都很好!

"虽然我也知道你的意思,我之前没有打扰回复,因为我不能被打扰,为你的模糊要求做出假设。"
- 是的。不能同意。或者你可以要求澄清。因为一部分无知的问题,人们在这里治愈的问题,有时候不知道也意味着不知道究竟要问什么。

最后,这不是帖子中的正确论坛,"
- 如果有办法在那里有办法,请建议将哪个论坛发布此事。谢谢。对于那个很抱歉。

"您可以在向论坛发布代码时使用代码标记。"
- WUTS代码标签

谢谢
[/引用]
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
或者你可以要求澄清。
你有多少次我每天在这个和其他论坛上询问这个问题。
有时不知道也意味着不知道究竟要做什么。
我不同意。如果您有问题,请说明您的问题。如果你不知道问题,那么你会详细说明你在做什么。你是如何做的。你正在经历哪些复合你的历史。没有科学或火箭科学,表达你的问题或体验真正的问题。有没有?
请告知哪个论坛发布此帖
VB6相关问题没有小节。但这个论坛适用于VS,这使得它不相关。也许是C#子论坛,甚至C#常规讨论。
Wuts code tags
这些是代码标签:
[CODE=csharp] Put your code here [/CODE]
它们有助于保留您的代码的格式和缩进,这使我们更容易阅读,因此请在将来使用代码标签发布代码。在Smilie Face旁边的帖子编辑器上有三个......单击它,然后单击代码标签并将代码粘贴到弹出的框中。

你得到上面的工作了吗?

顺便说一下,欢迎来到论坛。
 
加入
2019年11月5日
消息
10
编程经验
5-10
右键单击VS Start图标,然后单击"Run as administrator".

这就是启用的东西"让装配com可见"是的,我也指出了你。
查看附件695. 或者 查看附件697.
约翰议员,

感谢回复!那很棒。好吧,我像你一样做了管理员的东西,毛皮先生说,这很好地摆脱了错误,但是警告,

"warning MSB3214: "C:\ Users \ gl552v \ source \ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.dll"不包含可用于COM互操作的任何类型。",

仍然存在,我认为有一些其他环境或陈述我失去了(显然)。我相信你知道答案!

谢谢,

伊万
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
如果我回忆起来,静态类就不能接触到COM。这是因为COM类工厂需要实例化一个类。
 
加入
2019年11月5日
消息
10
编程经验
5-10
毛茸茸,

是的,如上所述,提出的建议Re管理员右键单击的东西确实修复了错误,但仍然仍然潜伏了一个问题,警告,

"warning MSB3214: "C:\ Users \ gl552v \ source \ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.dll"不包含可用于COM互操作的任何类型。",

我记得我在构建属性页面上讲述的其他构建设置"注册COM Interop",但显然还有一些东西,可能是一些类似的指示。

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

谢谢,

伊万
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
嗯,我不遵循,我在这里在烟雾上运行(本周的许多深夜)所以......
这 :
错误无法注册类型库"C:\用户\ GL552V \源\ repos \ classlibrary9 \ classlibrary9 \ bin \ debug \ classlibrary9.tlb"。访问OLE注册表时出错。
通过使用升高的权限来修复?

如果这是正确的,那么,注册应该有效。还可以确保您使用相应的Regasm版本,因为有32和64位。您还可以检查注册表或在注册时写入文件日志,显示注册详细信息。


写一个日志并向我们展示你得到的东西。你很可能需要跳伞运动员和约翰赫的帮助,因为我对猫头鹰vb的大多数人都慢慢消失了。所以我不会对你有很多用。
 
Last edited:

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,159
地点
挪威
编程经验
10+
如果我回忆起来,静态类就不能接触到COM。
这是对的,用常规方法创建一个常规类,没有静态。
This :
错误无法注册类型库
通过使用升高的权限来修复?
真的。
还可以确保使用相应的Regasm版本,因为有32和64位
这"Register for COM"选项在构建项目时自动在开发机上注册COM库。如果部署您需要Regasm.exe。
作为Office COM库,如果Office安装为32位,则必须构建为x86(32位),反之亦然。
 
加入
2019年11月5日
消息
10
编程经验
5-10
是提升的权限解决了错误,现在我在没有添加接口类和其他一些东西的情况下遇到了警告,如下所示,所以代码现在如下所示:

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;
        }

    }

}


现在问题是当我尝试使用以下代码访问VBA中的代码工作时,

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位。您还可以检查注册表或在注册时写入文件日志,显示注册详细信息。


写一个日志并向我们展示你得到的东西。你很可能需要跳伞运动员和约翰赫的帮助,因为我对猫头鹰vb的大多数人都慢慢消失了。所以我不会对你有很多用。

是的,升高的权限固定了错误,我加了一个"interface"我才可以编译和加载VBA,但是当我试图使用它时,它得到了可怕的"automation error"错误(请参阅上面对johnh的响应)。有任何想法可能会忘记吗?有什么与传递价值有关?

谢谢,

伊万
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,893
地点
切萨皮克,va.
编程经验
10+
您是否确保您与Office安装的位匹配?例如。如果您有32位办公室,则需要确保将您的程序集编译(并注册)作为x86程序集。另一方面,如果您有64位办公室,则需要将组件编译(并注册)作为x64程序集。"Any CPU"不会削减它。

自从我不得不处理VBA以来已经发生了近20年了。正如我记得的那样,可怕的自动化错误也提供了一种方法来获取有关错误代码以及某种日志和/或Callstack的错误的详细信息。您可以通过提供这些细节来帮助我们帮助您吗?

这只是我的看法,基于我在这个帖子上看到的东西,但它看起来像是你刚刚光泽在人们给你的各种各样的回复,所以我们最终必须重复自己。 (EX。作为管理员运行,如何使用非静态类等操作,如果您看到您不明白的东西,请询问。不要只是盲目地吹掉它。
 
最佳 底部