Visual_Basic 板


LINE

※ [本文转录自 C_and_CPP 看板] 作者: RaoBlack (Rao) 看板: C_and_CPP 标题: [问题] 如何在VBA 呼叫dev c++ 的dll 时间: Sat Apr 3 13:00:24 2010 目前在研究用dev c++做出dll再用excel VBA去呼叫里面的函式,本身不是 资讯类相关科系,写程式是为了做大量的复杂运算,程式概念有些并不是 很稳固请多包涵,之前参考了很多网路上的资讯,也有很多范例程式,但 是都试不成功,不确定是什麽原因,以下针对我的问题说明: 先於dev c++ 制作dll,下面两段是预设的程式码 dll.h档 #ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ DLLIMPORT void HelloWorld (void); #endif /* _DLL_H_ */ dllmain.c档 /* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h> #include <stdio.h> #include <stdlib.h> DLLIMPORT void HelloWorld () { MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION); } BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; } 接下来我将程式做一点点修改,只有修改dllmain.c,dll.h没有动 加了两个简单的函式 dll.h档(没有修改) #ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ DLLIMPORT void HelloWorld (void); #endif /* _DLL_H_ */ dllmain.c档 /* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h> #include <stdio.h> #include <stdlib.h> DLLIMPORT void HelloWorld () { MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION); } BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; } int _stdcall AddNumber(int nNum1, int nNum2) { return nNum1+nNum2; } int _stdcall MultiNumber(int nNum1, int nNum2) { return nNum1*nNum2; } 就只有加了上述两个简单函式 接着就做编译的动作了 修改了一下.def档 .def档 ; dlltool --base-file C:\DOCUME~1\ASCIIH~1\LOCALS~1\Temp/cca03116.base --output-exp MathDll.exp --dllname MathDll.dll --output-def libMathDll.def --no-export-all-symbols --add-stdcall-alias --exclude-symbol=DllMainCRTStartup@12 --def C:\DOCUME~1\ASCIIH~1\LOCALS~1\Temp/cca03116.def --output-lib libMathDll.a EXPORTS AddNumber @1 //这个是我自己key进去的 MultiNumber @2 // 这个也是我自己key进去的 HelloWorld @ 3 //原本预设是@1 我改成@3 选好应用程式 program file里的 excel.exe 执行时excel就自行开启了,然後我就开启excel的vb编辑器加了下面的 程式码 Option Explicit Private Declare Function AddNumber _ Lib "C:\MathDll\MathDll.dll" ( _ ByVal nNum1 As Integer, _ ByVal nNum2 As Integer _ ) As Integer Private Declare Function MultiNumber _ Lib "C:\MathDll\MathDll.dll" ( _ ByVal nNum1 As Integer, _ ByVal nNum2 As Integer _ ) As Integer Private Sub Command1_Click() Dim nNum1 As Integer Dim nNum2 As Integer nNum1 = 5 nNum2 = 6 Debug.Print AddNumber(nNum1, nNum2), MultiNumber(nNum1, nNum2) End Sub 执行时就出现了错误 错误讯息如下: 执行阶段错误'453': DLL进入点AddNumber无法在C:\MathDll\MathDll.dll C:\MathDll\MathDll.dll是我资料夹的路径 程式是参考网路上提供的范例,但就是试不成功 我使用的系统是dev c++ 4.9.9.2 以及Excel 2003 请版大们帮帮忙,看看是什麽问题,感激不尽!! --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.72.162 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.72.162







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP