如何在C#应用程序中使用以char**为参数的extern "C" dll函数?
我的dll具有函数: extern "C" int doJob(char** buffer); 它使用C ++的用法如下: char* buf; int status = doJob(&buf); 在C#中我应该有什么定义? 如何在C#? 中使用此功能 解决方案 可能的模式之一是: [DllImport("containsdojob.dll", CallingConvention = CallingConvention.Cdecl)] public static extern Int32 doJob(out IntPtr buffer); [DllImport("containsdojob.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void freeMemory(IntPtr buffer); 和 IntPtr buffer = IntPtr
16 2024-04-26
编程技术问答社区
CLR和CLI的区别以及如何从纯C语言中调用它们
有人可以告诉我,CLR和CLI之间的区别在于基本功能,但最重要的是其中哪一个更好? 我到目前为止所得到的只是,使用ICLRRuntimeHost接口不允许我返回int以外的任何其他内容,而唯一允许的参数是LPCWSTR(请参阅 executeIndeFaultAppDomain ) ) 在这一点上,我想知道是否可以/可以分配内存,例如对于A struct在他的C程序中,将指针作为LPCWSTR string to ExecuteInDefaultAppDomain提供,然后将此指针转换回另一侧,以便在该struct上使用.我不明白它如何处理每个功能的签名人的限制:int fncname(string param); 我看了看 有人可以告诉我如何在C中使用 cli ?我似乎找不到一些可以显示如何工作的代码行. 解决方案 您可以通过CLI传递并返回复杂数据. CLI是一个中间层.当您将数据从托管代码(.NET)传递给本机代码(C,C ++)时,您需要一个中间层,该层
12 2024-04-26
编程技术问答社区
新的Access数据库,如何能做到?
我在C#中使用Microsoft Office Access进行存储.我可以阅读并保存到数据库. 现在,我需要允许用户使用新的数据库项目,但像工作一个一样结构构造,也可以实现Save As选项. 此外,我还需要导出到文本文件/csv. 任何想法或示例代码都会有所帮助. 解决方案 创建空白DB的一种方法是尝试以下 using System; using ADOX; public class CreateDB { public static void Main( string [] args ) { ADOX.CatalogClass cat = new ADOX.CatalogClass(); string create = @"Provider=Microsoft.Jet.OLEDB.4.0;Data
10 2024-04-26
编程技术问答社区
在C#中使用代表作为C Dllimported功能的回调
我正在尝试调用c dll的功能. 但是我得到了一个stackoverflowException,所以我认为该函数作为参数有问题. 详细看起来像这样. c dll(标题文件): typedef struct { MyType aType; /* message type */ int nItems; /* number of items */ const MyItems *lpItem; /* pointer to array of items */ } MyStruct; typedef void (__stdcall *MyCbFunc) (HWND, const MyStruct *); API(BOOL) RegisterCbFunc (ARGS, MyCbFunc); 在C#中我尝试了以下操作: [StructLayout(LayoutKind.Sequential, CharSet = Cha
28 2024-04-26
编程技术问答社区
在C#和C-Simple之间进行嵌套结构的管理 HelloWorld
我遇到了一个问题,其中正确编组了来自父结构的数据,但是子结构中的数据不是. C: 中的结构定义和功能 struct contact_info { char cell[32]; char home[32]; }; struct human { char first[32]; char last[32]; struct contact_info *contact; }; __declspec(dllexport) int __cdecl say_hello(struct human *person); __declspec(dllexport) int __cdecl import_csv(char *csvPath, struct human *person); C#P/Invoke代码: [StructLayout(LayoutKind.Sequential)] public struct contact_info { [
10 2024-04-26
编程技术问答社区
从C转换为C#,还是制作DLL?
我是C#编程的新手.我有一个我在C中修改的程序,现在我需要将我从C程序中获得的字符串数组传递给C#程序,以便它可以使用这些值查询Oracle数据库. 此程序用于从连接到计算机的所有IBUTTON设备中获取序列号. 这是C代码 // function prototypes void UnLoadTMEX(void); short LoadTMEX(void); // globals static FARPROC Get_Version, TMGetTypeVersion, TMEndSession; static FARPROC TMSetup, TMNext, TMRom, ExtendedStartSession; static FARPROC TMReadDefaultPort; long (__fastcall *TMExtendedStartSession)(short,short,void *); static HINSTANCE hInst; unsi
18 2024-04-26
编程技术问答社区
C#和C的bcrypt之间的RSA
我正在尝试使用RSA 2048在我的C#和C程序之间进行加密.为此,我在C程序中嵌入了私钥,并在C#程序中嵌入公共密钥.然后,我的C#程序加密一个字符串并将其发送到我的C程序进行解密.问题是,当我使用bcrypt_pad_none以外的任何填充选项时,在调用BCryptDecrypt函数时会收到0xc000000d错误.问题是C#'S System.Security.Cryptography库只有使用PKCS1和OAEP的选项,这些选项似乎与BCRypt的版本不兼容(或者我的公钥是错误的怀疑).我确定了这一点,因为设置var encryptedData = rsa.Encrypt(dataToEncryptBytes, true); true表示它使用oaep而false表示它使用pkcs1,当我进行这些更改时,我还修改了我的DecryptRsaData函数中的两个BCryptDecrypt函数,其中始终会导致错误aka invalid_parameter.然后,当我更改为使用bcryp
14 2024-04-26
编程技术问答社区
什么是WPF相当于Windows Forms Region.Xor的Paint事件?
我正在尝试将此Winforms代码移至WPF,但是没有Paint事件. private void OnPaint(object sender, PaintEventArgs e) { var region = new Region(new Rectangle(0, 0, this.Width, this.Height)); var rectangle = new Rectangle(0, 0, 50, 50); region.Xor(rectangle); e.Graphics.FillRegion(Brushes.Black, region); } 解决方案 WPF在图形方面无法像Winforms一样工作.您实际上不能绘制形状,必须将它们放入您的内容中. 在一个很好的替代品Region.您可以使用 Geometry.Combine 并指定 GeometryCombineMode.Xor 复制图纸代码. 要实际显示Geometry,将其
20 2024-04-26
编程技术问答社区
嵌套结构解读
有两个非托管结构 typedef struct multipolynomial { int N; int max_power; double* X; double** Y; } multipolynomial; typedef struct output { double d; multipolynomial mp; } output; 和相应的托管模拟 [StructLayoutAttribute(LayoutKind.Sequential)] public unsafe class Multipolynomial { public int n; public int max_power; public double* X; public double** Y; } [StructLayoutAttribute(LayoutKind.Sequential)] public unsafe
24 2024-04-26
编程技术问答社区
如何在C#中调用c函数
我想在C#中使用此C函数: typedef void (*WRITE_CALLBACK)(int hMountEnv, unsigned __int64 NumBytesWritten, void* pContext); 我将如何定义它,以便我称呼它? 我需要做其他任何事情来完成这项工作吗? 解决方案 看一下 http:http:http:http://msdn.microsoft.com/en-us/library/ektebyzx(v=vs.80).aspx 有关如何乘坐功能指针.该页面的底部有一个示例. 我会为您做C#,并且由于我不知道指针的前进方向,我将同时展示两者.有一些陷阱,对于您涉及召开会议的情况可能会有问题. Marshal.GetDelegateForFunctionPointer和Marshal.GetFunctionPointerForDelegate假设功能指针将是stdcall,因此,如果您无法访问未
12 2024-04-26
编程技术问答社区
将C语言源代码转换为DLL,以便在C#应用程序中使用
我有一个用VC ++ 6.0编写的C源代码,我需要在我正在编码的C#应用​​中使用该代码. 我做了很少的事情来实现这一目标,我已经在发布模式下运行了C源文件,并生成了InterMediate.Manifest文件和其他文件,我可以使用这些文件中的任何一个来解决我的问题. 解决方案 您想做的是导入dll 这样: [DllImport("user32.dll")]//This is where you identify your dll... public static extern int MessageBoxA( //This would be an object from your dll int h, string m, string c, int type); public static int Main() { return MessageBoxA(0, "Hello World!", "My Message
10 2024-04-26
编程技术问答社区
C语言中的地理编码查询
我想做一个超快速的地理码查找,返回坐标,以获取城镇,城市或国家的投入.我的知识是基本的,但据我了解,在C中写它是一个很好的开始.我认为拥有这样的树结构是有意义的: 英格兰 肯特 Orpington chatam 罗切斯特 多佛 Edenbridge 威尔特郡 Swindon Malmsbury 在我的文件/数据库中,我将具有坐标和城镇名称.如果给我的程序这个名字"肯特",我想要一个可以以最快的方式将我与"肯特"协调返回的程序 出于性能原因,我应该将数据存储在二进制文件或SQL数据库中吗? 搜索此数据的最佳方法是什么?也许二进制树搜索? 数据应该如何存储?也许? 解决方案 这里有一些建议,但不仅仅是: 如果您想通过名称或名称前缀查找您希望的地方正如您建议的那样.如果您有一个主导使用数据结构的操作,则通常最好选择数据结构以适合操作. 在这种情况下,字母顺序的位置列表将更适合您的查询.在每个位置不在最高级别的地方,您需要添加某种引用其
18 2024-04-25
编程技术问答社区
将C语言api转换为C# GUI
我有一个我对结构的字节流.现在,我需要使用这些结构的值更新C#GUI.现在,我使用Google找到了有关Pinvoke和Dllimport的信息,但是一切都在调用C#的C代码,我需要做相反的事情. C#代码具有旋转拨号/更新值的函数,因此一旦我拥有所需的值,我只想调用这些函数,这些值将这些值作为参数,我的C代码全部编写,GUI都是编码的,并且使用我用鼠标拖动的拨号功能功能,我只需要将它们粘合在一起. 感谢您的帮助! 解决方案 一般而言,您不能从C代码调用C#代码. (您可以从C代码中调用 Back 到C#代码,但是C#侧需要启动该过程并通过回调.) "正确的方式"是为C#代码调用C代码并提供回调函数(查找如果无法使用该选项,您有一些选择,但是它们都不会像"粘合在一起"那样容易: 使用混合模式C ++库桥接C和C#代码. IMO,这是一团糟,我只建议它是因为它对您的C代码的最小更改. 从您的C#代码中暴露了一个COM对象,并与C进行通信.与选项A的混乱少于
18 2024-04-25
编程技术问答社区
如何将C语言风格的printf格式转换为C#字符串格式?
如何将字符串格式模式从c的printf()转换为c#string.Format()模式? 例如,C的"%04x"转换为C#'S "X4" 解决方案 我认为,将一个字符串模式转换为另一种字符串模式是最好的. (如果问题是通用或可能仅限于几个有趣的部分,那将是我的方法.) 如果您追求.net中的printf,则可以使用lib解决: http://www.codeproject.com/articles/19274/a-printf-implementation-in-in-c https://sourceforge.net/project/projects/printfnet/ 或使用Pinvoke到Real printf: http://community.bartdesmet.net/blogs/barts/bart/bart./archive/2006/09/28/4473.aspx 可以将printf模式转换为字符串的通用方法.format也许可以从两
10 2024-04-25
编程技术问答社区
在C#上用union声明C结构
我想在我的代码中声明_waitchain_node_info struct声明 - 用于WCT使用. 我试图遵循以下内容的教程: https://msdn.microsoft.com/en-us/library/eshywdt7(v=vs.110).aspx 但是,每次我都会使用我的托管结构声明使用wct呼叫,我会造成巨大的腐败. typedef struct _WAITCHAIN_NODE_INFO { WCT_OBJECT_TYPE ObjectType; WCT_OBJECT_STATUS ObjectStatus; union { struct { WCHAR ObjectName[WCT_OBJNAME_LENGTH]; LARGE_INTEGER Timeout; BOOL Alertable; } LockObject; struct {
10 2024-04-25
编程技术问答社区
我与C#代码团结一致的错误消息很少
所以我正在创建一个简单的2D游戏,在某个时候,我遇到了一些错误,我认为这是因为我使用旧的写作方式,所以如果有人可以给我一种现代的写作方式C#代码将对我有很大帮助 这是代码: using UnityEngine; public class PlayerMovement : MonoBehaviour { public float moveSpeed; public Rigidbody2D rb; private Vector3 velocity = Vector3.zero; void FixedUpdate() { float horizontalMovement = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime; MovePlayer(horizontalMovement); } void MovePl
10 2024-04-25
编程技术问答社区
通过控制台将二进制数据从C语言传给C#语言
我有两个应用程序,一个用C#编写,另一个用C#编写,它们通过控制台字符串消息进行对话.他们俩都等到另一个发送字符串消息. 现在,我希望在某个时刻C应用程序通过相同的控制台I/O"通道"以二进制格式发送图像,并且C#应用程序会收到它并将其用作显示的图像.我知道这是可能的,请参阅: c/c ++:是否可以通过控制台传递二进制数据?. 我可以访问两个应用程序的源代码.我知道C应用程序代码将图像写入磁盘的位置. C#应用程序通过此代码获取C应用程序输出: process.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); //void p_OutputDataReceived(object sender, DataReceivedEventArgs e) //e.Data. 我必须如何编码此二进制图像传输的C和C#一部分?谢谢. 解决方案 如果您的问题是如何传输此数据,那么您
12 2024-04-24
编程技术问答社区
用字符串的delim对一个字符串进行标记
如果我有一个字符串,例如 "这是一个将由此拆分的字符串," 我想将拆分结果作为 "是一个将被" )分开的字符串 "和"" "这是字符串" "将被此分配,并且" 1和2被"此"拆分 3和4被" That" 拆分 我的解决方案是使用字符串的映射来字符串并将结果存储在同一类型字符串的另一个地图中.但是,对于更复杂且较长的文本,存储在地图中的结果重复,即在上面的1和3中,重复了子字符串"是字符串",并且此冗余产生不正确的统计结果. . 您能提供一个整洁的解决方案,以用不同的长字符串的定义者对长字符串进行长篇字符串? 解决方案 string myString = "This is a string that will be splitted by this and that"; string foo = myString.ToUpper(); string[] byThis = foo.Split(new string[] { "THIS" },
22 2024-04-24
编程技术问答社区
C语言中的加密和C#中的解密
我在我的服务器端代码中使用了rijndael(加密算法),该代码是C语言.但是我的客户用C#和C#编写了自己的Rijndael类来加密和解密. 在客户端,我正在为密钥生成使用相同的密码,但客户端应用程序无法解密它.我想在C中加密文件并在.NET(C#)中解密该文件. 服务器代码: http://wwwww.efgh.com/software/software/rijndael.txtteb一个> 客户端代码: public static void Encrypt() { string password = @"4c696e6775614e6578742431302a4c6f63616c697a6174696f6e2a3949505f3030372a"; // Your Key Here /*UnicodeEncoding UE = new UnicodeEncoding(); byt
14 2024-04-24
编程技术问答社区