社区
ActiveX/COM/DCOM
帖子详情
com与dll本质区别?
daydayup234
2006-05-12 01:39:44
如果人问com与dcom区别
我会简单说
一个机器与另外一个之间dcom
同一个机器com
那么我的问题如何简短回答
最好不要太技术,通俗点
...全文
1138
22
打赏
收藏
com与dll本质区别?
如果人问com与dcom区别 我会简单说 一个机器与另外一个之间dcom 同一个机器com 那么我的问题如何简短回答 最好不要太技术,通俗点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luokaikun
2007-04-09
打赏
举报
回复
com和dll
不就是系统的限制和反限制!
应用和反应用!
laowang2
2007-01-18
打赏
举报
回复
up
daydayup234
2006-05-22
打赏
举报
回复
我倒觉得
happyct(绿叶对大树的情怀) ( ) 信誉:105
“Com需要注册 Dll不需要”站的住
huzhangyou
2006-05-22
打赏
举报
回复
有忘记我的广告了
我的网站 www.libing.net.cn
huzhangyou
2006-05-22
打赏
举报
回复
秋天的树 嘿嘿 笨蛋 哈哈
接分
leonatcs
2006-05-21
打赏
举报
回复
这个肯定?不一定吧。.ocx里面都是类的。Com是过是的技术。.net才是未来的计算平台。--微软说的。声明一下,我不是微软的Fans
ocx之所以能“里面都是类的”, 就因为它是com的一种应用。
com是.net的基础。
就说么,好象vc与cb的dll也据说能互用的。
如果没有类,所有语言编写的dll都可以互用!要不要dll干什么!
如果对com有兴趣,可以看看com本质论,只看第一章,就理解com是什么了。
daydayup234
2006-05-19
打赏
举报
回复
to:BenLeak(ID 被封,只能使用马甲了)
看看这个:来自 http://www.ccrun.com/article/go.asp?i=498&d=f36445
五. BCB 调用 VC 编写的 DLL
1. 名字分解:
没有名字分解的函数
TestFunction1 // __cdecl calling convention
@TestFunction2 // __fastcall calling convention
TESTFUNCTION3 // __pascal calling convention
TestFunction4 // __stdcall calling convention
有名字分解的函数
@TestFunction1$QV // __cdecl calling convention
@TestFunction2$qv // __fastcall calling convention
TESTFUNCTION3$qqrv // __apscal calling convention
@TestFunction4$qqrv // __stdcall calling convention
使用 extern "C" 不会分解函数名
使用 Impdef MyLib.def MyLib.DLL 生成 def 文件查看是否使用了名字分解
2. 调用约定:
__cdecl 缺省
是 Borland C++ 的缺省的 C 格式命名约定,它在标识符前加一下划线,以保留
它原来所有的全程标识符。参数按最右边参数优先的原则传递给栈,然后清栈。
extaern "C" bool __cdecl TestFunction();
在 def 文件中显示为
TestFunction @1
注释: @1 表示函数的顺序数,将在“使用别名”时使用。
__pascal Pascal格式
这时函数名全部变成大写,第一个参数先压栈,然后清栈。
TESTFUNCTION @1 //def file
__stdcall 标准调用
最后一个参数先压栈,然后清栈。
TestFunction @1 //def file
__fastcall 把参数传递给寄存器
第一个参数先压栈,然后清栈。
@TestFunction @1 //def file
3. 解决调用约定:
Microsoft 与 Borland 的 __stdcall 之间的区别是命名方式。 Borland 采用
__stdcall 的方式去掉了名字起前的下划线。 Microsoft 则是在前加上下划线,在
后加上 @ ,再后跟为栈保留的字节数。字节数取决于参数在栈所占的空间。每一个
参数都舍入为 4 的倍数加起来。这种 Miocrosoft 的 DLL 与系统的 DLL 不一样。
4. 使用别名:
使用别名的目的是使调用文件 .OBJ 与 DLL 的 .DEF 文件相匹配。如果还没有
.DEF 文件,就应该先建一个。然后把 DEF 文件加入 Project。使用别名应不断
修改外部错误,如果没有,还需要将 IMPORTS 部分加入 DEF 文件。
IMPORTS
TESTFUNCTIOM4 = DLLprj.TestFunction4
TESTFUNCTIOM5 = DLLprj.WEP @500
TESTFUNCTIOM6 = DLLprj.GETHOSTBYADDR @51
这里需要说明的是,调用应用程序的 .OBJ 名与 DLL 的 .DEF 文件名是等价的,
而且总是这样。甚至不用考虑调用约定,它会自动匹配。在前面的例子中,函数被
说明为 __pascal,因此产生了大写函数名。这样链接程序不会出错。
5. 动态调用例子
VC DLL 的代码如下:
extern "C" __declspec(dllexport) LPSTR __stdcall BCBLoadVCWin32Stdcall()
{
static char strRetStdcall[256] = "BCB Load VC_Win32 Dll by __stdcall mode is OK!";
return strRetStdcall;
}
extern "C" __declspec(dllexport) LPSTR __cdecl BCBLoadVCWin32Cdecl()
{
static char strRetCdecl[256] = "BCB Load VC_Win32 Dll by __cdecl mode is OK!";
return strRetCdecl;
}
extern "C" __declspec(dllexport) LPSTR __fastcall BCBLoadVCWin32Fastcall()
{
static char strRetFastcall[256] = "BCB Load VC_Win32 Dll by __fastcall mode is OK!";
return strRetFastcall;
}
其实动态调用与调用 BCB 编写的 DLL 没有区别,关键是查看 DLL 的导出函数名字
可以使用 tdump.exe(BCB工具) 或者 dumpbin.exe(VC工具) 查看
tdump -ee MyDll.dll >1.txt (查看 1.txt 文件即可)
由于 VC6 不支持 __pascall 方式,下面给出一个三种方式的例子
void __fastcall TForm1::btnBLVCWin32DynClick(TObject *Sender)
{
/*cmd: tdbump VCWin32.dll >1.txt
Turbo Dump Version 5.0.16.4 Copyright (c) 1988, 1998 Borland International
Display of File VCWIN32.DLL
EXPORT ord:0000='BCBLoadVCWin32Fastcall::'
EXPORT ord:0001='BCBLoadVCWin32Cdecl'
EXPORT ord:0002='_BCBLoadVCWin32Stdcall@0'
*/
if ( !DllInst )
DllInst = LoadLibrary ( "VCWin32.dll" );
if ( DllInst )
{
BCBLoadVCWin32Stdcall = (LPSTR (__stdcall *) () )
GetProcAddress ( DllInst, "_BCBLoadVCWin32Stdcall@0" ); //VC Dll
// GetProcAddress ( DllInst, "BCBLoadVCWin32Stdcall" ); //BCB Dll
if ( BCBLoadVCWin32Stdcall )
{
ShowMessage( BCBLoadVCWin32Stdcall() );
}
else ShowMessage ( "Can't find the __stdcall Function!" );
BCBLoadVCWin32Cdecl = (LPSTR (__cdecl *) () )
GetProcAddress ( DllInst, "BCBLoadVCWin32Cdecl" );
if ( BCBLoadVCWin32Cdecl )
{
ShowMessage( BCBLoadVCWin32Cdecl() );
}
else ShowMessage ( "Can't find the __cdecl Function!" );
//Why?不是 'BCBLoadVCWin32Fastcall::',而是 '@BCBLoadVCWin32Fastcall@0'?
BCBLoadVCWin32Fastcall = (LPSTR (__fastcall *) () )
//GetProcAddress ( DllInst, "BCBLoadVCWin32Fastcall::" );
GetProcAddress ( DllInst, "@BCBLoadVCWin32Fastcall@0" );
if ( BCBLoadVCWin32Fastcall )
{
ShowMessage( BCBLoadVCWin32Fastcall() );
}
else ShowMessage ( "Can't find the __fastcall Function!" );
}
else ShowMessage ( "Can't find the Dll!" );
}
6. 静态调用例子
静态调用有点麻烦,从动态调用中可以知道导出函数的名字,但是直接时(加入 lib 文件到工程文件)
Linker 提示不能找到函数的实现
从 4 看出,可以加入 def 文件连接
(可以通过 impdef MyDll.def MyDll.dll 获得导出表)
建立与 DLL 文件名一样的 def 文件与 lib 文件一起加入到工程文件
上面的 DLL(VCWIN32.dll) 的 def 文件为(VCWIN32.def):
LIBRARY VCWIN32.DLL
IMPORTS
@BCBLoadVCWin32Fastcall = VCWIN32.@BCBLoadVCWin32Fastcall@0
_BCBLoadVCWin32Cdecl = VCWIN32.BCBLoadVCWin32Cdecl
BCBLoadVCWin32Stdcall = VCWIN32._BCBLoadVCWin32Stdcall@0
对应的函数声明和实现如下:
extern "C" __declspec(dllimport) LPSTR __fastcall BCBLoadVCWin32Fastcall();
extern "C" __declspec(dllimport) LPSTR __cdecl BCBLoadVCWin32Cdecl();
extern "C" __declspec(dllimport) LPSTR __stdcall BCBLoadVCWin32Stdcall();
void __fastcall TfrmStatic::btnLoadDllClick(TObject *Sender)
{
ShowMessage ( BCBLoadVCWin32Fastcall() );
ShowMessage ( BCBLoadVCWin32Cdecl() );
ShowMessage ( BCBLoadVCWin32Stdcall() );
}
注意:在 BCB 5.0 中,可能直接按下 F9 是不能通过 Linker 的,请先 Build 一次
注:上面的程序使用 BCB 5.0 与 VC6.0 编译成功
daydayup234
2006-05-17
打赏
举报
回复
?楼上
供exe用都放到exe的进程中有何不好
ThinkX
2006-05-17
打赏
举报
回复
dll 是进程内COM的一种存在形式,各种进程内com组件包括ocx本质上都是dll。
BenLeak
2006-05-17
打赏
举报
回复
就说么,好象vc与cb的dll也据说能互用的。
反正我没有实现过跨编译器的 DLL 类调用
而且我也没有听说过谁实现了,曾经听说过有 N 人实现的,不过好像用了一些很特别的技术(比如直接按照 PE 查找)实现的
daydayup234
2006-05-17
打赏
举报
回复
com就是一堆dll?
那dll里不是也可以放好多类 函数 么
dll不也是“一堆dll”
chpst
2006-05-17
打赏
举报
回复
说多了com就是堆dll, dll不完全是com.
要不就是1楼的
COM是技术
DLL是一种文件类型.
daydayup234
2006-05-17
打赏
举报
回复
就说么,好象vc与cb的dll也据说能互用的。
chpst
2006-05-17
打赏
举报
回复
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;815065
http://www.microsoft.com/china/MSDN/library/archives/technic/develop/winDNA/0314a.asp
有微软的两篇文章。我没看完哈。
楼上的说“如果把类放到传统dll中,vc写的dll将不能被bc写的exe调用”
这个肯定?不一定吧。.ocx里面都是类的。Com是过是的技术。.net才是未来的计算平台。--微软说的。声明一下,我不是微软的Fans
daydayup234
2006-05-17
打赏
举报
回复
“如果把类放到传统dll中,vc写的dll将不能被bc写的exe调用”
这个肯定?
leonatcs
2006-05-17
打赏
举报
回复
com是一种技术,目的是为了提供带有OO特征的共用。(传统dll技术只能导出函数,不能提供带OO特征的共用:如果把类放到传统dll中,vc写的dll将不能被bc写的exe调用)
com对象可以存在于dll文件也可以存在于exe文件。
供exe用都放到exe的进程中有何不好
那样就不能共用了。
chpst
2006-05-16
打赏
举报
回复
dll就是简单的com
都是微软惹的祸
daydayup234
2006-05-13
打赏
举报
回复
?楼上
那么那个做com给人用的
能不能不做成com而作成dll
反正是诚心给exe用么
happyct
2006-05-12
打赏
举报
回复
Com需要注册
Dll不需要
daydayup234
2006-05-12
打赏
举报
回复
楼上
好象CB中dll里可以用类
并且被静态加载到exe的用的
dll不之是函数
加载更多回复(2)
利用输入法注入
DLL
Ring3下注入
DLL
的另类方法,能过杀软和游戏NP(源码) 注入
DLL
是做全局钩子或者拦截类软件都有可能用到的技术,如果做外挂的话我们也有 可能需要注入一个
DLL
到游戏进程中去干点什么“坏事”。 但我们知道现在要注入
DLL
是越 来越难了。场景1:制作火星文输入法外挂,原理是利用API HOOK拦截并修改输入法相关函 数,需要注入一个
DLL
到所有进程中,但是后来发现,在开启了瑞星的帐号保险箱后,用户 将不能在QQ中输入火星文。原因是瑞星保护了QQ进程,禁止对其注入
DLL
,解决方法是提示 用户关闭帐号保险箱 -_-| 确实是很降低用户体验的一个不是办法的办法。场景2:制作某 游戏外挂,需要注入一个
DLL
到游戏进程中去直接调用游戏函数完成某一功能。结果发现该 游戏有NP保护,OpenProcess打不开,创建远程线程也不行,试用其它方法也一一失败。遇 到上面的情况,高手们自然是转到Ring0下面去,使用驱动之类的办法来对付啦,不过吾等 菜鸟可就是酒井没法子了 -_-| 不过也别太灰心,凡事总会有办法的。我想我们需要一种持久的、稳定的、不容易被安 全软件屏蔽的
DLL
注入方法,后来发现,输入法程序就是能完成这一任务的理想人选。输入 法程序程序到底是什么?它没有自己的进程,并且在系统还没有登录时就已被加载(在欢迎 界面你也可以调出输入法),它可以在游戏中打开,也可以在控制台程序中打开,还可以在 瑞星保护下的QQ中打开,在杀软中也可以打开,这不就是我们要找的特性吗。那么,输入法 到底是什么呢?根据Windows的规定,输入法其实就是一个
DLL
,不过它是一个特殊的
DLL
, 它必须具有标准输入法程序所规定的那些接口,输入法是由输入法管理器(imm32.
dll
)控 制的,输入法管理器又是由user32.
dll
控制的。输入法在系统目录是以IME为扩展名的文件 ,当在应用程序中激活某个输入法时,输入法管理器就会在那个应用程序的进程中加载对应 的IME文件,注意,加载IME文件跟加载普通的
DLL
并没有
本质区别
,所以,可以认为,输入 法其实就是注入到应用程序中的一个
DLL
文件,并且,这种“注入”是不会被杀软和游戏NP 拦截的(至少目前是)。现在,我们已经有了一个注入
DLL
的另类方法,那就是利用输入法 。具体流程是这样,首先制作一个标准输入法文件,但是这个输入法并不完成文字输入工作 ,它的唯一任务就是用来注入
DLL
,所以称为“服务输入法”,然后,制作一个控制程序, 来控制服务输入法,当然最后还需要一个用于注入的目标
DLL
,这样一共就有3个文件。开始 工作后,控制程序首先将服务输入法安装到系统中,然后传递几个参数给服务输入法,参数 中包括了需要注入的
DLL
文件的名称和路径,然后,控制程序将服务输入法设置为系统的默 认输入法,这样新的程序一打开,服务输入法就会注入那个程序。当然,在服务输入法安装 之前打开的程序不会被注入,这时需要向系统中的所有窗口POST一条 WM_INPUTLANGCHANGEREQUEST消息,该消息可以在指定窗口中后台激活服务输入法,这样, 系统中所有拥有窗口的进程就都被我们的服务输入法注入了。服务输入法注入程序之后,就 会根据控制程序传递过来的参数加载目标
DLL
,这样目标
DLL
也就随着服务输入法一同注入到 目标程序中了。注意服务输入法是控制程序用WM_INPUTLANGCHANGEREQUEST消息在所有窗口 中自动激活的,如果某个窗口自动激活失败,你就需要在那个窗口中手工切换到服务输入法 ,这样才能注入进去了。至于注入以后,你就可以在窗口中切换到别的输入法,这并不会影 响已经注入进去的
DLL
。我将这一套功能制作成一个完整的示例,你可以在以下地址下载: http://www.pen88.
com
/download/imehook.rar 压缩包中的第6个和第8个文件夹演示了此 功能并包含所有源代码。其中文件ime
dll
host09.
dll
就是服务输入法,运行时会被安装到系 统中,控制程序退出时会自动卸载该输入法,这样用户就不太容易察觉,你还可以重新编译 该输入法,将名称改为“中文(中国)”,这样隐蔽性更好。文件hxw
dll
wx.
dll
是演示用的 目标
DLL
,你可以替换成自己的
DLL
,然后那个exe文件就是控制程序了。输入法 ime
dll
host09.
dll
在运行时会被复制到系统目录并更名为ime
dll
host09.ime,它导出了2个 函数用于控制。在VB中的声明为: Public Declare Function IMESetPubString Lib "ime
dll
host09.ime" (ByVal Run
DLL
Str As String, ByVal Unload
Dll
As Long, ByVal loadNextIme As Long, ByVal
Dll
Data1 As Long, ByVal
Dll
Data2 As Long, ByVal
Dll
Data3 As Long) As Long Public Declare Function IMEClearPubString Lib "ime
dll
host09.ime" () As Long 其中IMESetPubString用于向输入法传递要注入的
DLL
等参数。Run
DLL
Str,要注入的
DLL
命令 和完整路径。Unload
Dll
,当输入法退出时,是否同时卸载目标
DLL
0-是,1-否。 loadNextIme,当切换至该服务输入法时,是否直接切换到下一个输入法(这样服务输入法 就好像被跳过了,可最小限度影响用户的输入法顺序) 0-否,1-是。
Dll
Data1,
Dll
Data2 ,
Dll
Data3是传递给目标
DLL
的回调函数(函数名称必须为Run
Dll
HostCallBack)的参数, 你可以在目标
DLL
中导出一个函数,名称为Run
Dll
HostCallBack,这样当输入法注入时会调 用目标
DLL
的该回调函数并向其传递这3个参数。函数原型为(VC): DWORD Run
Dll
HostCallBack(DWORD calldata1, DWORD calldata2,DWORD calldata3); IMEClearPubString函数用于清除输入法的配置,清除后,输入法将停止在新的程序中注入 目标
DLL
,但已注入的
DLL
不会卸载。 好了,利用输入法来注入
DLL
基本上就是这样了,详细的用法大家可以看压缩包中的第8个文 件夹,其中服务输入法是VC写的,控制程序是VB的,代码都是有注释的。测试发现该方法能 过目前所有杀软,也能注入冰刃。当然缺点还是有的,就是目标程序如果不接受输入法那就 没办法了,但是现在一般的游戏都不会禁止玩家在里面打字吧,而且杀软也不能禁止用户输 入汉字吧,哈哈,所以通用性应该还是蛮好的。 最后,我再介绍另一个注入
DLL
的方法,估计也很少被用到。是利用一个未公开函数 RegisterUserApiHook,可以在网上搜索关键词“RegisterUserApiHook”,查到有人在 Windows 2003下测试成功,但是我在Windows XP测试却失败。后来终于找到了失效的原因。 RegisterUserApiHook函数可以在系统中注册一个全局钩子,你需要在钩子中指定一个
DLL
和 一个回调函数,然后,所有加载了user32.
dll
的程序就都会在启动时加载你指定的这个
DLL
。用这个函数来注入
DLL
也是很不错的。但是测试发现它的注入能力似乎赶不上上面提到的 利用输入法来注入的办法,可以注入一般的程序和某些安全程序,但是对冰刃无效。而且它 有一个限制,就是系统中只能同时存在一个这样的钩子。实际上这个钩子平时是被系统中的 Themes服务占用了,Themes服务正是利用这个钩子HOOK了绘制窗口的相关API,所以才让所 有程序窗口变成XP主题样式的。所以我们要用这个钩子的话,必须先关闭Themes服务,这样 在XP下也可以用了,但是这样系统就变成Windows 2000的样式了 -_-| RegisterUserApiHook函数的VB声明如下: Public Declare Function RegisterUserApiHookXP Lib "user32" Alias "RegisterUserApiHook" (ByVal hInstance As Long, ByVal fnUserApis As Long) As Long Public Declare Function RegisterUserApiHook2003 Lib "user32" Alias "RegisterUserApiHook" (pRegInfo As HookAPIRegInfo2003) As Long 可以看到,在XP和2003下这个函数的参数是不一样的。关于此函数的示例代码,请参见压缩 包中的第5个文件夹。 最后的最后,再介绍一个未公开函数InitializeLpkHooks,这个函数在网上能找到的资料更 少,只有一个声明而已。但是它名称中最后那个“Hooks”误导了我,我以为又是一个可以 用来注入
DLL
的不错函数,用OD反出来一看,原来只是个局部HOOK而已。虽然没太大用,还 是一并写上吧,也许谁用得着呢。InitializeLpkHooks顾名思义就是HOOK LPK的,Windows 有个lpk.
dll
,就是支持多语言包的那么个功能。测试发现好多程序在TextOut之前似乎是要 调用lpk.
dll
里面的相关函数的,可能是支持多语言的程序就需要用这个来判断到底要显示 那种语言吧。而InitializeLpkHooks,就是用来HOOK lpk.
dll
里面的4个函数的,这4个函数 是LpkTabbedTextOut,LpkPSMTextOut,LpkDrawTextEx,LpkEditControl。我们先打开VB, 在窗体中加入以下代码吧: Private Sub Form_Load()
DLL
hwnd = LoadLibrary("lpk.
dll
") '加载
DLL
DLL
FunDre = GetProcAddress(
DLL
hwnd, "LpkDrawTextEx") '获取回调函数地址 LpkHooksInfo.lpHookProc_LpkTabbedTextOut = 0 LpkHooksInfo.lpHookProc_LpkPSMTextOut = 0 LpkHooksInfo.lpHookProc_LpkDrawTextEx = GetLocalProcAdress(AddressOf HookProc1) '设置要HOOK的LPK函数 LpkHooksInfo.lpHookProc_LpkEditControl = 0 InitializeLpkHooks LpkHooksInfo End Sub Private Sub Form_Unload(Cancel As Integer) LpkHooksInfo.lpHookProc_LpkTabbedTextOut = 0 LpkHooksInfo.lpHookProc_LpkPSMTextOut = 0 LpkHooksInfo.lpHookProc_LpkDrawTextEx =
DLL
FunDre LpkHooksInfo.lpHookProc_LpkEditControl = 0 InitializeLpkHooks LpkHooksInfo FreeLibrary
DLL
hwnd End Sub 然后新建一个模块,在模块中加入以下代码: Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long ' ----------------未公开函数-------------------------------------- Public Declare Sub InitializeLpkHooks Lib "user32" (lpProcType As Any) Type LpkHooksSetting lpHookProc_LpkTabbedTextOut As Long lpHookProc_LpkPSMTextOut As Long lpHookProc_LpkDrawTextEx As Long lpHookProc_LpkEditControl As Long End Type ' ------------------------------- Public
DLL
hwnd As Long,
DLL
FunDre As Long Public LpkHooksInfo As LpkHooksSetting Public Function GetLocalProcAdress(ByVal lpProc As Long) As Long GetLocalProcAdress = lpProc End Function Function HookProc1(ByVal a1 As Long, ByVal a2 As Long, ByVal a3 As Long, ByVal a4 As Long, ByVal a5 As Long, ByVal a6 As Long, ByVal a7 As Long, ByVal a8 As Long, ByVal a9 As Long, ByVal a10 As Long) As Long HookProc1 = 0 End Function 运行一下看看,是不是窗体中标题栏和按钮上的文字都没有了,因为我们把函数 LpkDrawTextEx替换成自己的函数HookProc1了。这个函数有10个参数,其中几个好像是字符 串指针,似乎可以用来截获窗体要显示的文字,然后改成另一种语言的文字,我猜想,也许 就是这个用途吧。哈哈,纯属猜测。以上就是函数InitializeLpkHooks的用法了。 以上就是全部。 本文所有示例代码的下载地址是: http://www.pen88.
com
/download/imehook.rar 我的QQ511795070,欢迎交流。
测试
dll
源代码
vbnet调用mfc生成的
dll
,本质上就是c的东西,和类没有关系。在无意中发现getc是不能使用的函数名,这大概就是后来c#的由来了。函数名还是要小心安排。调用的
dll
1注意是配套的。
用Visual C#制作
DLL
通过此篇文章,可以看出用Visual C#制作一个
DLL
其实并不是一件很复杂的事件,但对
DLL
的调用却和以往有了较大区别,其中最主要的原因是,用Visual C#或者其他.Net 程序开发语言制作的
DLL
和以前的
DLL
有了实质上的区别。它已经不是严格意义上的动态连接库了,而是一个类或者类库。
3dsmax插件开发
所谓插件,其实就是动态链接库,windows 系统上就是
dll
,打开Autodesk/3ds Max 9/stdplugs文件夹,会看到下面一大堆扩展名叫dlu,dlo,等等的文件。其实这都是
dll
改的名字,本质还是
dll
。当宿主程序运行起来的时候,会加载这个文件夹下的所有dlxx扩展名的文件。 如果你想快速写插件,通常使用 maxsdk提供的 vc wizard 最容易创建一个特定的插件框架程序.这里简单说一下设置 3dsmax vc wizard 的方法:安装了3dsmax product以后,还要安装maxsdk,sdk和大量的sample在dvd完整安装版本上,PluginWizard 的路径在Autodesk/3ds Max 2009 SDK/maxsdk/howto/3dsmaxPluginWizard下面,里面有readme.txt文件
C#生成
DLL
文件的方法
本文实例讲述了C#生成
DLL
文件的方法。分享给大家供大家参考。具体分析如下: Visual C#生成
DLL
文件 VisualC、Delphi或者VB等编程语言来编写的
DLL
文件,在编译完成以后,产生
DLL
文件已经是一个可以直接供计算机使用的二进制文件。但用Visual C#编译器生成的受管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码,实质上是一种中间语言(IL)代码,需要经过”下一代窗口服务”( Next Generation Windows Services,简写为NGWS ) runtime的即时编译器(即JIT)进行编译。 用Visual C#生成的
DLL
文件已经和以前的
ActiveX/COM/DCOM
703
社区成员
3,002
社区内容
发帖
与我相关
我的任务
ActiveX/COM/DCOM
C++ Builder ActiveX/COM/DCOM
复制链接
扫一扫
分享
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章