Tag: dll

无法使用VBA中的string调用VB.NET COM DLL函数

我用一个简单的testing函数实现了一个VB.NET DLL: <ComVisible(True)> Function TestString ( <MarshalAs(UnmanagedType.BStr)> xyz As String) As <MarshalAs(UnmanagedType.BStr)> String Dim y As Integer TestString = "Hello" End Function 这个function很简单。 在VBA中,我适当地声明了这个函数: Public Declare Function TestString Lib "myDLL.dll" (xyz As String) As String 从VBA我也显然加载DLL。 然而问题是,当我运行这样的function: Dim st as String st = "Hello" Debug.Print TestString(ByVal st) 我收到一条消息说错误的DLL调用约定。 另一方面,当我删除<MarshalAs(UnmanagedType.BStr)>function工作,但打印"Hello"后不久崩溃。 我究竟做错了什么?

当调用用C写的DDL函数时,Excel VBA脚本崩溃,该函数返回一个stringBSTR

我正在使用Code :: Blocks在C中编写一个DLL,我打算在Winbatch脚本中使用它,但是现在我正在使用Excel VBAtesting它。 VBA脚本运行DLL getVersion()函数的时刻Excel崩溃。 在网上search几天:我没有find一个合适的解决scheme。 C代码是这样的 #define MQTTPUB_VERSION "V3.1.1Test" DLL_EXPORT BSTR __stdcall WINAPI getVersion(void) { return MQTTPUB_VERSION ; } VBA代码是这样的 Public Declare Function mqttPubMsg Lib "mqttPubMsg.dll" _ (ByVal MQTT_ADDRESS As String, ByVal MQTT_CLIENTID As String, ByVal MQTT_TOPIC As String, ByVal MQTT_PAYLOAD As String) As Long Public Declare Function getVersion Lib "mqttPubMsg.dll" () As […]

在Excel VBA中调用C#DLL中的方法

我试图从我创build的C#DLL中使用VBA中的方法。 该文件是COM可见,并在我的VBA文件中引用。 这是我的VBA代码: Private Declare Function COMPaste Lib "C:\Blah\bin\x86\Debug\TestCOMExposure.dll" Alias "Countdown" (ByVal left As Integer) As Integer Sub TestA() Dim instance As TestCOMExposure.TestProgram Set instance = New TestCOMExposure.TestProgram MsgBox (instance.COMPaste) End Sub 在C#dll中查看我的方法: namespace TestCOMExposure { [System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)] [ProgId("TestCOMExposure.TestProgram")] [Guid("4EFE27BF-A442-4F93-9A55-A00BD2D7160A")] public class TestProgram : ITestProgram { public void Countdown() { int i = 60; […]

proj.xll加载项加载到excel后不会加载

我已经search和search,find一个.xll Excel插件无法正常工作的解决scheme。 加载项是proj.xll( https://github.com/jbuonagurio/proj.xll ) 说明只是说; 将proj.xll复制到%USERPROFILE%\ AppData \ Roaming \ Microsoft \ AddIns。 转到Excel选项,加载项,pipe理Excel加载项。 单击浏览,然后selectproj.xll。 这样做后,我加载我的电子表格,并得到这个错误; “proj.xll”的文件格式和扩展名不匹配。 该文件可能已损坏或不安全。 除非你相信它的话,否则不要打开它。 你想打开吗? 我点击是,我得到与他们的“ LËÝbÉÜRichcÉÜPEL ”等乱码的单元格。 有些网站表示.dll文件丢失,这是加载项所需要的,但我不确定是什么dll文件,如何找出我需要什么dll文件,以及如何find它的位置dll文件。 我试图让这个加载项在多台计算机上运行,​​并安装了不同版本的excel。 如果任何人都可以提供很棒的帮助。 谢谢,

EXCEL UDF DLL在excel adins中不可见

我跟着互联网上的教程如何创buildudf。 项目AutomationSample(类库)中名称为“AutomationSample”的类 using System.Runtime.InteropServices; using ExcelUdf.Automation; namespace AutomationSample { [ClassInterface(ClassInterfaceType.AutoDual)] [Guid("7CE422F9-BF1C-40B1-BD52-C9B31E09A2E2")] public class AutomationSample : UdfBase { public double AutomationSampleAdd(double a, double b) { return a + b; } public double AutomationSampleSubtract(double a, double b) { return a – b; } } } 类是COM可见的,编译后,我有DLL 之后,当我去excell – 添加插件selectExcel插件 – 去 – 自动化 我没有看到我的class上的名单。 我在这里错过了什么? 我也尝试手动注册与regasm的.dll,但即使没有看到它 即使从OP下载项目仍然无法使用C#.NET […]

如何从VBA(Excel Visual Basic)中的DLL接收“char * d”?

现在我试图得到一个string作为下面的c函数。 这是DLL的C函数, char _stdcall *fmt_hex(long long num, int nbits, char *d) { sprintf(d, "0x%0*llX", (nbits – 1) / 4 + 1, num); return (d); } 下面是Excel VBAfunction。 Option Explicit Private Declare PtrSafe Function pll_dll Lib "F:\work\pll_dll\x64\Debug\pll_dll.dll" (ByVal num As LongLong, ByVal nbits As Integer, ByRef d As String) Dim d As String Sub useSquareInVBA() Cells(4, […]

带有本地代码DLL的Excel 2016 VSTO插件

使用来自第三方的SDK创buildExcel插件。 SDK包含一个本地代码DLL(32位和64位版本)。 我的插件代码是在C#中,看来只有在“AnyCPU”选项下编译才能运行插件。 当我尝试运行应用程序,我得到“试图加载一个不正确的格式的程序(从HRESULTexception:0x8007000B)”这通常意味着一个64/32不匹配,错误是从试图加载第三第三方本地代码DLL。 我的问题是:我的假设是正确的关于AnyCPU,有没有一种方法可以从AnyCPU下编译的插件运行本机代码DLL? 谢谢!

如何debuggingExcel的COM服务器加载?

我已经成功地编写了一个32位Excel RTD服务器 。 这是在Excel中加载罚款,并在单元格中键入=RTD(…) 。 然而,我的64位版本的相同的代码不起作用,我想知道任何方式来debugging这个。 我找不到任何相关的文件。 我有一个64位RTD服务器DLL。 依赖沃克没有显示任何问题,缺lessDLL依赖关系,事实上,如果我链接一个玩具可执行文件,我可以调用这个DLL罚款。 该DLL已成功注册regsvr32。 Excel甚至可以看到它,但将其列为“非活动”。 过去,在开发32位版本时,通常是由于缺lessDLL依赖关系(但没有错误消息)而发生的。 如前所述,我可以链接到DLL和依赖沃克没有显示任何问题。 我还能做些什么来debugging这个问题? 如果它是开源的,我会看看Excel的源代码,并试图做它做的,但显然这不是一个选项。 相同的代码产生一个32位的DLL,32位Excel运行良好。 但是,64位Excel似乎无法使用64位DLL。

从VBA发送一个string数组到一个C ++ DLL,然后遍历这些string

我正在制作一个C ++ DLL以允许在Excel中进行串行通信。 这是大部分工作,但我挂在VBA的string数组。 我的DLL的这个特定函数应该包含一个char *数组,一个表示它们长度的整数,一个指向double数组开头的指针,其中我将存储每个string的parsing数据,以及一个整数,表示每个数字中有多less个双精度行(numRows)) 这是DLL代码。 //first read a lines from the serial port and then parse it into dataArray, does this until there is no data in buffer or array is full //returns how many rows that it read DLL_EXPORT int WINAPI parseAllLinesFromSerialPort(char* lineBuff, int bufferLength, double* dataArray, int numRows) { int currentRow […]

VBA FreeLibrary不会卸载DLL

我需要删除一个DLL文件,当我完成使用它(代码完成后清理)。 我尝试使用Excel VBA中的“LoadLibrary”和“FreeLibrary”,但无论我做什么,Excel.exe都会附着到DLL文件中。 Public Declare PtrSafe Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Public Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Sub Load_Unload_DLL() Dim lb As Long, pa As Long lb = LoadLibrary("C:\Users\Administrator\Documents\MathLibrary.dll") 'MsgBox "Library address: " & lb Dim FreeResult As Long FreeResult […]