相关疑难解决方法(0)

使用C#中的复杂用户定义类型(UDT)调用VB6 DLL函数

我正在编写一个C#应用程序来调用第三方VB6 DLL.我在References-> COM选项卡中添加了对VB6 DLL的引用.

DLL中的特定方法采用VB6 UDT(用户定义类型)作为参数.

此UDT在COM的自动生成的.NET包装器中显示为结构.该结构具有许多子UDT /结构以及VBA.Collection类型的成员(如.NET元数据所示).它还有常规数据类型,如string,short,double,int等.

我在我的C#代码中初始化这个结构为:

udtEmployee udtEmpData = default(udtEmployee);
Run Code Online (Sandbox Code Playgroud)

我也试过了

udtEmpData = new udtEmployee();
Run Code Online (Sandbox Code Playgroud)

如果我没有使用default或new初始化它,我无法编译我的C#代码,因为编译器抱怨使用未分配的变量.

我需要传递这个结构作为参考.我是这样做的:

clsEmployee.SetData(ref udtEmpData);
Run Code Online (Sandbox Code Playgroud)

在调用VB6 DLL的这个方法时,我收到错误:

错误:尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

原因是什么,解决方案是什么?

注意,我无法更改VB6 DLL,因为我没有其源代码.我正在使用VS 2005.

编辑1:

这是一个完整的背景:

有一个本地开发的ERP产品,它支持使用VB6的附加开发.它有一个配置文件,它指定要加载的附加DLL的名称.然后,这些插件将显示在ERP应用程序的菜单中.在菜单上单击,ERP调用名为StartAddOn()的函数,该函数应存在于VB6 DLL中.

我想在C#中开发附加组件,所以我开发了一个带有StartAddOn方法的简单VB6插件,后者又将控制权传递给我的.NET DLL.

.NET DLL使用ERP公开的业务类,并来回传递数据对象.在.NET DLL中,我添加了对ERP供应商发布的DLL的COM引用.

所以架构是这样的:ERP-> VB6 AddOn和StartAddOn方法 - > .NET DLL->使用ERP供应商发布的COM DLL及其数据类(结构/ UDT).

如何调试内存错误?

c# vb6 dll com-interop user-defined-types

9
推荐指数
1
解决办法
691
查看次数

在VBA观察列表中查找特定文本

VBA监视列表允许您在逐行浏览宏时监视变量.有没有办法扩展监视列表中包含的对象的所有属性,并在其中搜索特定文本?观察列表中的一行可以复制到记事本或单词等中,但似乎没有办法导出监视列表的全部内容或一次搜索所有行.

我试图确定Excel电子表格上对象的特定属性是什么.能够在观察列表中找到其中包含的文本将大大加快我的搜索速度.

vba watch excel-2010

6
推荐指数
1
解决办法
1094
查看次数

Visual Basic 6中的控件属性

有没有办法在循环中请求控件属性?

我需要这样的东西:

For each p in control.properties
    if p = "Value" then
        msgbox "I Have Value Property"
    elseif p = "Caption" then
        msgbox "I Have Caption Property"
    end if 
next
Run Code Online (Sandbox Code Playgroud)

它可以以某种方式完成?

vb6 controls properties

1
推荐指数
1
解决办法
5893
查看次数