jjzjj

c# - 在 C# 中编码一个 char**

我正在与采用char**(即指向字符串的指针)的代码进行交互:intDoSomething(Whatever*handle,char**error);基本上,它需要一个状态句柄,如果出现问题,它会返回错误代码和可选的错误消息(内存是在外部分配的,并通过第二个函数释放。那部分我已经弄明白了:)).但是,我不确定如何在C#中处理in。我目前拥有的:[DllImport("mydll.dll",CallingConvention=CallingConvention.Cdecl)]privatestaticunsafeexternintDoSomething(IntPtrhandle,byte

c# - 如何让 Rebar 的 .NET 包装器决定鼠标光标?

我正在为.NET制作一个Rebar包装器。以下是我如何进行控制。publicclassRebar:Control{publicRebar():base(){//Controlwon'tevenworkifIletUserPaintenabledSetStyle(ControlStyles.UserPaint,false);}protectedoverrideCreateParamsCreateParams{get{CreateParamscp=base.CreateParams;cp.ClassName="ReBarWindow32";//REBARCLASSNAMEcp.ExStyl

c# - 仅在 IDE 之外的 Release模式下 x64 .NET 4.0 应用程序崩溃

所以,我的小测试应用程序遇到了一个非常奇怪的问题。就问题而言,我的意思是它崩溃了……很难。没有异常(至少,没有我能捕捉到的)被抛出,只是“BlahBlah已经停止响应......”消息。它仅当我在x64、Release模式和IDE之外运行应用程序时崩溃。如果我在x86模式下运行它,或者如果我在x64的IDE中运行它,或者我在x64中作为DEBUG独立运行它,它工作正常。我已将其缩小到我的p/invokePeekMessage调用。所以,我需要这里的聪明才智来查看我写的废话,并告诉我我做的是否正确。因为,说真的,我他妈的快要失去理智了。我在两台计算机上试过这个,它们都表现出相同的行为。我

c# - 优化托管到 native 调用

如何加快从托管代码调用native方法?我正在编写一个程序,该程序需要能够管理任意大小的对象列表并从中高速检索信息,并将其输入脚本。脚本是一些编译后的C#代码。我正在编写从C++(native)DLL/SO/等到C#(.Net或Mono)管理层的基本接口(interface)层。现在,我一直在做一些测试,我发现平均而言,从托管代码调用native方法比在托管代码中调用native方法慢100倍(所有native和所有托管都一样快,供引用)。我使用的语法是:[DllImport("test.dll")]externstaticpublicStringtest_method(Stringv

c# - 将包含数组的 C 结构编码到 C#

在stackoverflow社区的大力帮助下,我成功地调用了nativeDLL函数。但是,我无法修改ID或intersects数组的值。无论我在DLL端用它做什么,旧值仍然存在。它似乎是只读的。下面是一些代码片段:C++结构:typedefstruct_Face{intID;intintersects[625];}Face;C#映射:[StructLayout(LayoutKind.Sequential)]publicstructFace{publicintID;[MarshalAs(UnmanagedType.ByValArray,SizeConst=625)]publicint[]

c# - NullReferenceException,没有堆栈跟踪...从哪里开始?

我有一个WPF音频应用程序。偶尔(甚至在调试器中)我会看到一个NullReferenceException,它不携带任何堆栈跟踪信息。如何开始调试这样的问题?一些背景:我正在P/调用WinMM.dll中的函数,其中涉及注册一个callback调用waveOutOpen时[DllImport("winmm.dll")]publicstaticexternMmResultwaveOutOpen(outIntPtrphwo,IntPtruDeviceID,WaveFmtpwfx,WaveCallbkdwCallback,IntPtrdwInstance,intfdwOpen);事实证明,这很

c# - 如何将数据从托管程序集流式传输到 native 库并再次返回?

如何将数据(文本)从托管程序集流式传输到native库,然后将数据(文本)流式传输回托管程序集?具体来说,我想在.NET端公开某种类型的System.IO.Stream,以及(最重要的)FILE*在native端。本地方法的签名应该是:FILE*foo(FILE*bar);围绕原生p/invoke调用的包装器的签名应该是:CustomStreamfoo(CustomStreambar);我不想在native端使用回调方法(一种用于获取更多数据,一种用于设置更多数据)。我想在native端使用FILE*-以及对其进行操作的所有相关方法,例如fprintf。我不想要任何磁盘I/O。这需要在

c# - 如何制作从 C# "Thread-safe"调用的 C (P/invoke) 代码

我有一些使用单个全局变量的简单C代码。显然这不是线程安全的,所以当我在C#中使用P/invoke从多个线程调用它时,事情就搞砸了。如何为每个线程单独导入此函数,或使其成为线程安全的?我尝试声明变量__declspec(thread),但这导致程序崩溃。我还尝试制作一个C++/CLI类,但它不允许成员函数是__declspec(naked),我需要(我正在使用内联汇编)。我在编写多线程C++代码方面经验不足,因此可能缺少某些内容。下面是一些示例代码:C#[DllImport("MyDll.dll",CallingConvention=CallingConvention.Cdecl)]pu

c# - NativeMethods 类是在 .NET 中专门处理的吗?

https://msdn.microsoft.com/en-us/library/ms182161.aspx本页中描述的三个类是否在.NETFramework中进行了特殊处理?(NativeMethods、SafeNativeMethods和UnsafeNativeMethods)我问的原因是我想知道是否可以创建NativeMethods类的类别。例如:ComNativeMethodsUser32NativeMethodsOleStorageNativeMethods 最佳答案 这是约定,不是要求。如果您反射(reflection)

c# - C DLL 中的 PInvoke char* 在 C# 中处理为字符串。空字符问题

CDLL中的函数如下所示:intmy_Funct(char*input,char*output);我必须从C#应用程序调用它。我通过以下方式执行此操作:...DllImportstuff...publicstaticexternintmy_Funct(stringinput,stringoutput);输入字符串完美地传输到DLL(我有可见的证据)。该函数填写的输出虽然是错误的。我有hexa数据,比如:3F-D9-00-01但不幸的是,两个零之后的所有内容都被截断了,只有前两个字节进入了我的C#应用程序。它发生了,因为(我猜)它被视为空字符并将其作为字符串的结尾。知道如何摆脱它吗?我试