源C dll中是否需要dllexport才能与[DllImport]一起在C#中使用?
我正试图围绕C.dll(pbmman32.dll,如果有人熟悉的话)编写一个包装函数,以便与C#一起使用 查看源代码的头文件,它们似乎没有实现源C dll中是否需要dllexport才能与[DllImport]一起在C#中使用?,c#,c,pinvoke,marshalling,dllimport,C#,C,Pinvoke,Marshalling,Dllimport,我正试图围绕C.dll(pbmman32.dll,如果有人熟悉的话)编写一个包装函数,以便与C#一起使用 查看源代码的头文件,它们似乎没有实现\uu declspec(dllexport),尽管它们确实使用extern“C”{}。我是否仍然可以调用该dll中缺少dllexport行的函数 例如: BOOL PBM_Version (TCHAR* Buffer, WORD* Version, DWORD Size) 进入: \uu declspec(dllexport)是将函数标记为可导出的方便
\uu declspec(dllexport)
,尽管它们确实使用extern“C”{}
。我是否仍然可以调用该dll中缺少dllexport行的函数
例如:
BOOL PBM_Version (TCHAR* Buffer, WORD* Version, DWORD Size)
进入:
\uu declspec(dllexport)
是将函数标记为可导出的方便方法,但这不是唯一的方法(例如,它们可能是使用.def文件导出的)
您应该能够查询DLL以获取所有导出的函数(您可以使用类似的方法)。如果要调用的函数已导出,则您可以继续使用。供应商可能提供了一个头文件供您在导入时使用,而不是他们用于构建DLL的版本。更有可能的是,他们导出了带有.def文件的函数。但不强制使用
\u declspec(dllexport)
。不要担心它的缺失
不过,我对您的翻译表示怀疑。第二个参数可能是一个无符号的2字节类型,作为out参数传递。声明如下:
out ushort version
用version>>8解码主要版本号,用version&0xff
解码次要版本号
仅读取头文件是不够的。您还必须阅读文档
另一个引起关注的领域是TCHAR
的使用。该库真的提供了ANSI和Unicode导出吗?我天真地认为它可以工作(除了StringBuilder
中WORD*
变量的StringBuilder
部分,它可能应该类似于ref-ushort
),您试过了吗?创建DLL的目的是从中导出函数。方法不止一种。只需使用Visual Studio命令提示符并运行dumpbin.exe/exports pbmman32.DLL,您就会看到导出了什么。请向供应商索要.NET包装器,您可能会遇到麻烦。现在还不能尝试,这张卡是驱动程序与的对话尚未到位。tchar*和word*有何区别,因此我必须传递ref而不是另一个stringbuilder tho?这是我运行该工具得到的结果:。它似乎列出了其中的函数。我看到有一个入口点列。是否需要在DLLImport中指定该入口点?@MikeD当然,您应该在该列表中查找要调用的函数。
out ushort version