当我在VBA中使用C#回调函数时;未找到入口点”;
本文关键字:入口 函数 回调 VBA | 更新日期: 2023-09-27 18:28:13
我想在VBA中使用C#回调函数。但当我调用C#函数时,它显示"未找到入口点"
我该怎么修?感谢
PS:我检查了使程序集COM可见并注册COM内部环境:MS Office Excel 2007、MS Visual Studio 2008
VBA代码:
Declare Function Result Lib"C:'Users'admin'Desktop'myprog'New_DLL_Test'New_DLL_Test'bin'Debug'New_DLL_Test.dll" Alias "Msg" (ByVal p As Long) As Integer
Function Disp()
MsgBox x
End Function
Sub AddResult(ByVal p As Long)
Dim x As Long
x = Result(p)
Debug.Print x
End Sub
Sub testnow_Click()
Call AddResult(AddressOf Disp)
End Sub
C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace New_DLL_Test
{
[Guid("f1286974-0f1a-466c-8389-dd1ab7e3eed2"), InterfaceType(ComInterfaceType.InterfaceIsDual)]
interface Msginterface
{
int Msg;
}
public unsafe class MsgProcess
{
public int Msg(int* p)
{
return add(p,1);
}
public int add(int* p, int j)
{
return j+1;
}
}
}
从VBA调用静态C#函数
如果要以这种方式编写VBA代码,并像这样访问DLL,则需要从C#项目创建非托管导出。我相信有两种方法可以做到这一点。一种是在托管C++中手动创建一个导出函数的包装器。另一种方法是使用像UnmanagedExports这样的编译时构建任务和库。
从VBA中使用COM可见的C#对象
若要通过COM互操作使用C#类,需要使用regasm.exe注册C#程序集,然后使用CreateObject函数在VBA中创建对象。类和接口都需要是COM可见的。你可以在这里找到一个非常基本的教程。