我需要调用本机函数
long (WINAPI*)(long,long*);
在长*它会给我结果
我正在做这个
[DllImport("mrfw.dll", EntryPoint = "_McammGetCurrentBinning@8")]
static long Get_Current_Binning(Int32, IntPtr);
但是这个电话无效
Int32 Camera_Index= 0;
Int32 Result;
IntPtr Result_Pointer = IntPtr(Result);
long Binning = Get_Current_Binning(Camera_Index, Result_Pointer);
我有异常System.AccessViolationException 所以,功能不能把结果写给我。
怎么做?
谢谢。
更新
嘿伙计们。 我不知道你们的意思,但我确实问过,我问过什么。- 我正在使用c ++ cli。它不是c#
- 我需要pinvoke。我无法从cli项目中调用unmanaget dll
-i确实通过这样做找到了解决方案。你可以删除我的答案,给我一些弊端,但它是有效的。真是太糟糕了?
[DllImport("mrfw.dll", EntryPoint = "_McammGetCurrentBinning@8")]
static long Get_Current_Binning(Int32, IntPtr);
int main(array<System::String ^> ^args)
{
Int32 Camera_Index= 0;
Byte* Result= new Byte(4);
IntPtr Result_Pointer = IntPtr(Result);
long Binning = Get_Current_Binning(Camera_Index, Result_Pointer);
}
答案 0 :(得分:1)
您正在使用混合模式C ++ / CLI进行编码,并且不需要p / invoke。如果您拥有的是没有.lib文件的DLL,以及混合模式C ++ / CLI程序,那么您有几个选项。
LoadLibrary
和GetProcAddress
。在任何一种情况下,您都可以像这样调用函数:
long result;
long retval = Get_Current_Binning(0, &result);
// check retval for success, and if so the result contains the returned value