2010-01-18 89 views
1

我有这个问题,我已经处理了一段时间了。在开始时,我有两个带非​​托管代码的dll(比如说... dll_1,dll_2),并在c#中管理应用程序。我应该做的是在托管代码中获取dll_1中的非托管函数指针,将其包装到结构中,并将此结构作为参数发送给dll_2中的非托管函数。有可能之前有人处理过这种问题吗?如何通过托管代码将非托管函数指针从dll发送到其他dll中的另一个非托管函数?

回答

0

由于您在托管代码中没有执行任何操作,但是DLL处于同一个进程中,只需使用IntPtr(根据平台自动设置32位或64位)来传递非托管指针。您当然也可以在您的结构中插入IntPtr,并在使用外部呼叫时将其用作参数或返回值(例如[DllImport('YourDll')] static extern IntPtr ImportedFunction();)。

但是,为了提供更多信息,有必要了解有关DLL调用及其数据结构的更多信息。

+1

...但确保DLL真的共享相同的过程(和公寓,如果你正在做COM)... – 2010-01-18 14:26:37

+0

@Pontus,你当然是对的,但传递非托管指针不是一个典型的COM任务,并且处理混合地址空间也不是。所以我只是假设简单/明显的情况。 – Lucero 2010-01-18 14:31:26

+0

你写的所有内容都是正确的;)谢谢。 – 2010-01-20 11:15:03