• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C\C++Dll-C#-MaxScript通过C#调用C++写的Dll

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

其实是以前博客的老贴子,太久没写博了,就粘贴过来点

自Max9开始,MaxScript可以直接调用.Net的dll文件,并且可以创建其中的类使用其中的方法。而.Net又可以调用C++编写的dll文件。于是可以使用C#对C++的代码封装一下,在max里调用。以下为范例。

---------------以下为dll.def

LIBRARY "Dll"

EXPORTS
HelloWorld @1

--------------以下为dll.cpp文件内容

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

void HelloWorld(
{
MessageBox( NULL, L"C++ Dll", TEXT("In Win32 DLL"), MB_OK);
}

-------以下为c#的封装文件,编译为ImportDll.Dll

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace ImportDll
{
public class Win32Dll
{
[DllImport("Dll.dll", EntryPoint = "#1")]
public static unsafe extern void HelloWorld();
}
}

-------------然后可以在MaxScript中如此调用

DotNet.LoadAssembly (GetFilenamePath (GetSourceFileName()) + "ImportDll.dll")
(DotNetClass "ImportDll.Win32Dll").HelloWorld()

------------------------

这里我使用了序号导出的方式,如果不想用def文件以序号导出,可以使用 extern "C" 来以C语言的方式将方法导出,之所以这么做是因为C++的导出的方法名会与dll源文件中的名字不符。

至于为何要用.Net转而不直接用MaxSdk,唯一的好处是,这样可以不受版本限制,不用为各个不同版本建立工程编译。当然这个方法仅限于对max没什么操作的情况下的扩展,如果涉及对Max的操作,就只能老老实实用SDK


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#软件绑定QQ群类开源放出发布时间:2022-07-10
下一篇:
C#Liststring转换成字符串按指定的字符分隔发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap