C# 64位程序调用第三方32位dll,请给出方案

实现功能:C#实现64位程序调用第三方32位dll。
实现方案:使用32位程序调用第三方dll,64位程序与32位程序进行通信,从而间接完成64位程序调用第三方32位dll
需求:接收端(32位程序)最好不使用遍历方式查询新消息,调用第三方dll需传输和接收的数据量很小(小于50字节),但要求传输时延越小越好,请问套接字(scoket)与消息队列哪种更好,实现更简单,另外64位程序与32位程序间最好可以互相订阅消息,也就是64与32位程序收到对方发的消息后可立即执行,希望提供64位程序与32位程序通信的C#代码。
之前有位朋友给出了windows钩子的解决方案,因为答案被删了,请再发一下。

4个回答

请大家看一下有没有什么解决方案

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# 64位程序调用第三方32位dll,请问这种方案是否可行?
方案:先自己遍写个32位程序调用第三方的32位dll,再使用socket完成64位程序与32位程的通信,从而完成调用第三方的dll。请问这样是否可行? C# 的socket是否可完成64位与32位程序的通信? 需求是这样的:接收端最好不使用遍历方式查询新消息,传输的数据量不大,但要求传输时延越小越好,请问套接字(scoket)与消息队列哪种更好,实现更简单。
C# Windows服务调用第三方dll
C# Windows 服务中要调用第三方dll中的方法,添加引用第三方dll,用InstallUtil.exe安装服务后,总是无法加载第三方dll,求高手解决,我知道服务的运行目录是C:\Windows\System32,难道也要将第三方dll拷贝到服务目录下?
用C#调用python程序(含第三方库)
本人使python小白,但是最近要做一个界面,开始我用C#,但是调用含第三方库(TensorFlow)的python程序时会报错,而且必须安装有python的编译环境,在网上查了一些资料可以先用C++调用Python,再打包成dll文件给C#调用,可是这样一来就很麻烦。所以我在想直接用Python+QT做界面会不会好一点。有没有大佬给点建议。
jni调用C#Dll,被调用DLL依赖的第三方DLL该放哪里?提示找不到
如题,我有一个第三方DLL文件,它本身也依赖其他一些第三方DLL库文件,我现在用java 通过Jacob的方式实现调用该DLL文件,总是提示找不到该DLL依赖的DLL文件,请问这些 依赖项该放哪里?或者怎么处理?
如何修改C++动态库使得C#可以调用其函数
例如第三方提供C++API,也就是使用C++来调用最底层dll,如何在上一层封装C++动态库使得C#可以调用底层dll其函数.
c#调用第三方dll,编写了一个窗体程序,安装在其他电脑上报错,在本机安装可运行
报错信息是下面内容,如何解决呢? 问题签名: 问题事件名称: CLR20r3 问题签名 01: WindowsFormsApplication1.exe 问题签名 02: 1.0.0.0 问题签名 03: 586b12d4 问题签名 04: WindowsFormsApplication1 问题签名 05: 1.0.0.0 问题签名 06: 586b12d4 问题签名 07: 5 问题签名 08: 10 问题签名 09: System.IO.FileNotFoundException OS 版本: 6.1.7601.2.1.0.256.1 区域设置 ID: 2052 其他信息 1: e6e6 其他信息 2: e6e6c208b90db2aa028f8f653cabbf23 其他信息 3: 741a 其他信息 4: 741a9989cdb57935d9e55a4648e008d1 联机阅读隐私声明: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804 如果无法获取联机隐私声明,请脱机阅读我们的隐私声明: C:\Windows\system32\zh-CN\erofflps.txt
尝试读取或写入受保护的内存 错误
c#调用第三方DLL,在32位系统下运行正常,64位下报错“尝试读取或写入受保护的内存”
Java通过JNI调用第三方dll文件问题
因为我对C语言不熟悉,所以我不会在.cpp文件中实现Java生成头文件,**所以想请各位大侠帮我写一个.cpp文件**,下面是我用java生成的头文件: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class test_CustomerShowDll */ #ifndef _Included_test_CustomerShowDll #define _Included_test_CustomerShowDll #ifdef __cplusplus extern "C" { #endif /* * Class: test_CustomerShowDll * Method: VC110_Init * Signature: ()Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_test_CustomerShowDll_VC110_1Init (JNIEnv *, jobject); /* * Class: test_CustomerShowDll * Method: VC110_Cls * Signature: ()Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_test_CustomerShowDll_VC110_1Cls (JNIEnv *, jobject); /* * Class: test_CustomerShowDll * Method: VC110_Display * Signature: (ILjava/lang/String;I)Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_test_CustomerShowDll_VC110_1Display (JNIEnv *, jobject, jint, jstring, jint); #ifdef __cplusplus } #endif #endif 恳请各位大侠帮帮小弟,这对我来说很重要,跪谢!
C# 中关于值的传递,虚方法、重写、反射
整体思想是:我想封装一个dll的形式把MVC及虚方法提供出去,让第三方调用时重写虚方法把值传递进来。目前下面的代码并不能实现该需求,拜托大神给个方案。 第一步是我封装的MVC Controller,由我控制固定调用第二步的方法,在第二步方法中,又调用了第三步的虚方法,而虚方法是真正的交互信息(一个返回实体)来源,现在虚方法中 默认了一个信息来源。现在我该怎么做,让第三方调用的信息源来改变我这个默认信息来源。 有什么方法来做这样的效果,我思路有限,拜托大侠些给个好的方案。不胜感激。 >>>1. //返回的。实际上我想他输入“这是重写吗?”,而不是现在输入的“Hello Word” public class TestController : Controller { private readonly TestMessage _testMessage = new TestMessage(); //我知道如果需要使用子类的重写方法应该实例化继承它的子类,但是,这个子类是由第三方调用我封装这个dll的用户创建,我控制不到我到底该怎么实例化。请大神帮忙想一个思路 public ActionResult Index() { string resulValue = _testMessage.ParseMsg(roots); return Content(resulValue); } } public class TestMessage { >>>2. //封装dll中自用 public string ParseMsg(string content) { SendMessageModel model = MedleyMessage(content); //调用第三部的方法,而这里的调用,我想信息是第三方调用该dll方传入信息源过来,同时我要把content给到第三方,让第三方来分析这个content,分析后,根据content的不同给我信息到这里的调用 string resultMsg = string.Empty; switch (model.MessageType) { case MessageTypeEnum.Text: resultMsg = this.ReturnTextMsg(userName, model.Content); break; case MessageTypeEnum.PicText: if (model.MessageItem != null && model.MessageItem.Count > 0) { List<MessageModel> item = model.MessageItem.Take(8).ToList(); resultMsg = this.ReturnPicTextMsg(userName, item); } break; } return resultMsg; } >>>3. //虚方法 public virtual SendMessageModel MedleyMessage(string content) { SendMessageModel model = new SendMessageModel(); model.Content = "Hello Word"; model.MessageType = MessageTypeEnum.Text; return model; } } >>>4. //模拟第三方接收到content后返回信息源到我封装的dll public class MessageReturnTest : TestMessage { public override SendMessageModel MedleyMessage(string content) { SendMessageModel model = new SendMessageModel(); model.Content = "这是重写吗?"; model.MessageType = MessageTypeEnum.Text; return model; } }
C# WinForm DevComponents.DotNetBar2 别的电脑上运行报错
问题描述: C# WinForm程序用了第三方的控件DevComponents.DotNetBar2.dll,所用的DotNetBar2是破解的安装版。应用程序是Visual studio 2010上开发的,开发时本机能正常使用, 但是编译完成后,发到其他电脑上运行报错,错误截图如下: ![图片说明](https://img-ask.csdn.net/upload/201711/23/1511412943_971726.png) 点开【详细信息】如下: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾。 ************** 异常文本 ************** System.Runtime.InteropServices.COMException (0x80040154): 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 在 System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid) 在 System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid) 在 System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid) 在 System.Windows.Forms.AxHost.CreateInstance() 在 System.Windows.Forms.AxHost.GetOcxCreate() 在 System.Windows.Forms.AxHost.TransitionUpTo(Int32 state) 在 System.Windows.Forms.AxHost.CreateHandle() 在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在 System.Windows.Forms.Control.CreateControl() 在 System.Windows.Forms.Control.OnVisibleChanged(EventArgs e) 在 System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e) 在 System.Windows.Forms.Control.SetVisibleCore(Boolean value) 在 DevComponents.DotNetBar.Metro.MetroTabPanel.set_Visible(Boolean value) 在 DevComponents.DotNetBar.Metro.MetroTabItem.?() 在 DevComponents.DotNetBar.Metro.MetroTabItem.set_Panel(MetroTabPanel value) 在 Courseware.MainForm.InitializeComponent() 位置 D:\workspace_vs2010\CoursewareNetImage\Courseware\MainForm.designer.cs:行号 391 在 Courseware.MainForm..ctor(LoginForm loginForm) 位置 D:\workspace_vs2010\CoursewareNetImage\Courseware\MainForm.cs:行号 35 在 Courseware.LoginForm.button1_Click(Object sender, EventArgs e) 位置 D:\workspace_vs2010\CoursewareNetImage\Courseware\LoginForm.cs:行号 513 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) ************** 已加载的程序集 ************** mscorlib 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 (RTMRel.030319-0100) 基本代码: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll ---------------------------------------- Courseware 程序集版本: 1.0.0.0 Win32 版本: 1.0.0.0 基本代码: file:///E:/系统网络版无OFFICE新版/Courseware.exe ---------------------------------------- System.Windows.Forms 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System.Drawing 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- log4net 程序集版本: 1.2.11.0 Win32 版本: 1.2.11.0 基本代码: file:///E:/系统网络版无OFFICE新版/log4net.DLL ---------------------------------------- System.Core 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll ---------------------------------------- System.Data.SQLite 程序集版本: 1.0.99.0 Win32 版本: 1.0.99.0 基本代码: file:///E:/系统网络版无OFFICE新版/System.Data.SQLite.DLL ---------------------------------------- System.Data 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 (RTMRel.030319-0100) 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll ---------------------------------------- System.Xml 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Transactions 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 (RTMRel.030319-0100) 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll ---------------------------------------- DevComponents.DotNetBar2 程序集版本: 12.2.0.7 Win32 版本: 12.2.0.7 基本代码: file:///E:/系统网络版无OFFICE新版/DevComponents.DotNetBar2.DLL ---------------------------------------- System.Configuration 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 (RTMRel.030319-0100) 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.EnterpriseServices 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 (RTMRel.030319-0100) 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll ---------------------------------------- System.Numerics 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll ---------------------------------------- AxInterop.APlayer3Lib 程序集版本: 1.0.0.0 Win32 版本: 1.0.0.0 基本代码: file:///E:/系统网络版无OFFICE新版/AxInterop.APlayer3Lib.DLL ---------------------------------------- mscorlib.resources 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 (RTMRel.030319-0100) 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll ---------------------------------------- System.Windows.Forms.resources 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll ---------------------------------------- Accessibility 程序集版本: 4.0.0.0 Win32 版本: 4.0.30319.1 built by: RTMRel 基本代码: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll ---------------------------------------- ************** JIT 调试 ************** 要启用实时(JIT)调试, 该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置 jitDebugging 值。 编译应用程序时还必须启用 调试。 例如: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> 启用 JIT 调试后,任何未经处理的异常 都将被发送到在此计算机上注册的 JIT 调试器, 而不是由此对话框处理。 我经过分析,发现DevComponents.DotNetBar2.dll在开发电脑上已经写入了注册表,应该是注册到了全局程序集GAC,如下图: ![图片说明](https://img-ask.csdn.net/upload/201711/23/1511413357_66205.png) 通过查找应用程序中代码{DevComponents.DotNetBar.Metro.MetroShell metroShell1;}的类的定义,也应验了实际上我的程序里使用的DevComponents.DotNetBar的类都是来自于GAC,如下图所示: ![图片说明](https://img-ask.csdn.net/upload/201711/23/1511413429_346565.png) 我现在的疑问是:C#项目根目录下已经存放了一个DevComponents.DotNetBar2.dll文件,并且已添加了此dll文件的引用(见下图),为什么程序最终使用的DevComponents.DotNetBar2.dll却是来自GAC而不是项目引入的dll,如何在C#项目中改变dll的程序集指向,不要用GAC的程序集?(因为使用这个应用程序的电脑不可能安装GAC全局程序集) ![图片说明](https://img-ask.csdn.net/upload/201711/23/1511414544_396136.png) P.S. 网上查了各种资料,有的说是使用.net framework 4.0及项目的setup属性改成x86,这些设置我都已查验过,开发电脑上设置都是对的,非开发用的电脑上也确认安装的是.net framework 4.0。
vs加载第三方动态库,调试模式能正常读取,但是单独执行exe,读卡出现问题!
[DllImport("RWManager.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi, EntryPoint = "ReadBase", SetLastError = true)] public static extern int dll_ReadBase(StringBuilder pInput, StringBuilder pOutput); public int ReadTest() { StringBuilder pInput = new StringBuilder(); pInput.Append("@0000=1@0002=mw@0010=LogIC@000B=2@000H=1@"); StringBuilder pOutput = new StringBuilder(); pOutput.Length = 256; pOutput.Capacity = 512; int flag = dll_ReadBase(pInput, pOutput); MessageBox.Show(flag.ToString()); return flag; } RWManager.dll是读卡器厂家提供的动态库,是用delphi 写的,dll 中的ReadBase方法要求传入的是pchar值,在网上查资料,C#调用的时候传入StringBuilder,程序在调试模式,能正常读卡,单独执行exe,却读卡异常!很奇葩的问题,有没有大神遇到过相同的问题,求指导!!!
C# Winform项目中, 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
C/C++ 代码,这个是第三方提供的外部方法(调用“华大HD-900身份证阅读器接口函数”): int HD_Read_BaseInfo(char* pBmpData, char *pName, char *pSex, char *pNation, char *pBirth, char *pAddress, char *pCertNo, char *pDepartment, char *pEffectData, char *pExpire); 我在C#中调用该方法,HD_Read_BaseInfo方法第一次调用正常,第二次调用提示"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。" [DllImport("HDstdapi.dll")] public static extern int HD_Read_BaseInfo(string pBmpData, string pName, string pSex, string pNation, string pBirth, string pAddress, string pCertNo, string pDepartment, string pEffectData, string pExpire); 附调用代码: int init_result = 1000; init_result = HD_InitComm(1001); //初始化连接 if (init_result == 0) { int auth_result = 1000; auth_result= HD_Authenticate(); //卡认证 if (auth_result == 0) { try { int red_result = 1000; //读卡操作,报"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"错误。 red_result = HD_Read_BaseInfo(null, null, null, null, null, null, null, null, null, null); } catch(Exception ex) { MessageBox.Show("form1====" + ex.Message); } } CHDNetSDK.HD_CloseComm(); 请各位帮忙看看,谢谢!
此错误的地址为 0x6a330726,在线程 0x5458 上。错误代码为 0xc0000005。
背景:用C# dllImport第三方库,使用C++写的,第三方库,大家都懂的原因,我没有C++源码,我参考网上的C++ C#类型转换系列文章,最后唯独以下代码报错,其他全部秒退。求各位大神帮帮忙,帮忙看看是什么原因,急,谢谢大家了~~ C++的调用声明 C++原型: int __stdcall ReadCard(uchar d12,uchar *buffData) //读取卡片 d12 USB类型,对于proUSB固定为1 buffData 返回的卡数据字符串 C#的声明: [DllImport("\\proRFL.dll", CallingConvention = CallingConvention.StdCall)] private static extern int ReadCard(int d12, ref string buffData); 测试的调用代码: string result = string.Empty; St = ReadCard(Fusb, ref result); bufCard = result.Substring(25, 8); if (St != 0) { MessageBox.Show("读卡失败"); } 遇到的错误: ![图片说明](https://img-ask.csdn.net/upload/201710/25/1508923742_733189.png) ![图片说明](https://img-ask.csdn.net/upload/201710/25/1508923828_724457.png) 运行时遇到了错误。此错误的地址为 0x66fab3fc,在线程 0x365c 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。 只有DLL文件,需要的话附上,没有C++源码提供分析,求各位大神解答
此错误的地址为 0x66fab3fc,在线程 0x31b8 上.错误代码为 0xc0000005
背景:用C# dllImport第三方库,使用C++写的,第三方库,大家都懂的原因,我没有C++源码,我参考网上的C++ C#类型转换系列文章,最后唯独以下代码报错,其他全部秒退。求各位大神帮帮忙,帮忙看看是什么原因,急,谢谢大家了~~ C++的调用声明 ``` int __stdcall Dcrf_ReadCard(char *S); //读卡 ``` C#的声明 ``` [DllImport("LsdDcrf.dll", CallingConvention = CallingConvention.StdCall)] public extern static int Dcrf_ReadCard(ref String Str); ``` 测试的调用代码: ``` String str = ""; CardRead.Dcrf_ReadCard(ref str); lab.Text = str.ToString(); ``` 遭遇的错误: ![图片说明](https://img-ask.csdn.net/upload/201612/05/1480929883_402794.png) 运行时遇到了错误。此错误的地址为 0x66fab3fc,在线程 0x365c 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。 ![图片说明](https://img-ask.csdn.net/upload/201612/05/1480929918_160849.png) 我没有C++的源码提供分析。。
关于c++库调用
想知道如果做c++开发,第三方库一般都是以什么形式存在,静态的还是动态的? Windows下面的Lib和Dll分别和Linux下面的so与a有什么不同,分别都在代码里面如何调用? 我看到有的是在g++编译的时候,用-I加入,有的是用#Progam comment(..)加入,有的是dlopen, 而dlopen貌似是无需引入header文件,在代码中利用open的句柄,用函数指针来实现调用的,如果我引入的库不是函数,而是一个类的话,在不知道类定义声明的前提下如何调用; 貌似所有的c++书中都没有详细的介绍和说明和例子,希望这方面能详细的讲解一下这几种方法,或者提供学习的链接,跪谢
AMF3 反序列 DSK时出现的问题!!请高手指点!
![图片说明](https://img-ask.csdn.net/upload/201910/26/1572074549_538212.jpg) 程序在暂停之前运行正常,发送接收的数据也正常,只是想把接收的AMF3数据转换成 message时出错如下图: ![图片说明](https://img-ask.csdn.net/upload/201910/26/1572074646_983354.jpg) 接下来附上 发送接收的数据: ![图片说明](https://img-ask.csdn.net/upload/201910/26/1572074682_176165.jpg)![图片说明](https://img-ask.csdn.net/upload/201910/26/1572074696_85807.jpg) 经查,服务端 把 Content对象的名称由 flex.messaging.messages.AcknowledgeMessage 转换成了别名 DSK ,导致 反序列后 Readmessage不能读出数据。 下面这段是网上查到的: 收到数据后,需要根据amf-packet-structure,对包体进行解析,解析完包头后,知道type为binary的header或message,在使用Amf0Input进行解析,在Amf0Input内部会根据数据类型切换到Amf3Input进行解析。   在解析的过程中,有可能出现header-length 或者message-lenght为-1,0xffffffff,的情况,如果出现了该情况,则不能简单的间输入数据拷贝已知的长度然后,交由AMF进行处理,事实上是直接将DataInputStream传给Amf0Input即可。   在使用的过程中,由于需要让AMF支持允许的类,需要调用 void ClassDeserializationValidator.addAllowClassPattern(String classNamePattern) 进行处理。   AMF可以针对未知的数据类型,产生键值对,只需要指定 SerializationContext context = SerializationContext.getSerializationContext(); context.createASObjectForMissingType = true; 该配置生效后,即可创建第三方的数据类型。   同时,在发送response时,AMF数据,默认将flex.messaging.messages.AcknowledgeMessageExt 当作了别名DSK进行了处理。 Specifics of AMF Support Flash or Flex objects can implement the flash.utils.IExternalizable interface and fully control the way an object is serialized. LoadComplete supports only some of these objects, namely: flex.messaging.io.ArrayCollection flex.messaging.io.ObjectProxy flex.messaging.io.ArrayList DSK (shorthand version of flex.messaging.messages.AcknowledgeMessageExt) As for other objects implementing the IExternalizable interface, LoadComplete does not parse them and does not support modifying data in them. In the Parameters tab it displays these objects as objects of the [Binary data] type. 所以需要使用flex的别名机制,从而让AMF能处理DSK类 void ClassAliasRegistry.registerAlias(String alias, String className) ClassAliasRegistry.getRegistry().registerAlias("DSK", "flex.messaging.messages.AcknowledgeMessageExt");   ———————————————— 版权声明:本文为CSDN博主「chnming1987」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/chnming1987/article/details/84556493 ———————————————— 在我的C#中该如何使用别名机制? 或者直接解析接收的AMF3数据也行,恳请高手帮解决一下为盼,谢谢!!!! 我没有 C币 ,实在对不住 暂时只能用了一个笨的办法来解决,使用 JAVA库 ,通过 IKVM转换为DLL 再用C#调用处理,导致发包文件太多,容量也大,开始稍微有点慢,重复执行后就快多了。 最终的解决方案只能是直接用C#来处理,等有时间先研究一下 AMFParse 的Fiddler 的插件再重新做吧,至少现在能用了,解决了燃眉之急!
C语言中,对一段函数进行超时判断,请问怎么实现?
windows下的C语言编程,需要对一段第三方dll中的函数进行超时控制,参考了很多种技术都没实现,请问该如何解决。 先说说我想到的东西: 1.<unistd.h>中的alarm,这玩意儿在Linux下有效,在Windows中无法使用,即使我用的MinGW标准gcc编译器。 2.<windows.h>中的timeSetEvent,配合<setjmp.h>中的setjmp和longjmp,这个是最接近的,可惜运行到超时时中断是中断了,可是一直会弹窗报错,不知道为什么。 我在下面的评论中把第二个思路的代码贴出来,再截一个弹窗报警的图。 请教C语言和Win32API高手帮忙看看。 ``` 作者:丁丁 链接:https://www.zhihu.com/question/49052307/answer/113997254 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <setjmp.h> jmp_buf j; /** * 时间中断函数 */ void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dwl, DWORD dw2) { printf("Timout!\n"); longjmp(j,1); } int longTimeFunction(){ while (1) { printf("operating...\n"); Sleep(1000); } return 0; } int main(){ HANDLE hHandle; UINT wTimerRes_1ms;//定义时间间隔 UINT wAccuracy; //定义分辨率 UINT TimerID_1ms; //定义定时器句柄 wTimerRes_1ms = 5000; if((TimerID_1ms = timeSetEvent( wTimerRes_1ms, wAccuracy, (LPTIMECALLBACK)OneMilliSecondProc, // 回调函数 (DWORD)(1), // 用户传送到回调函数的数据; TIME_PERIODIC//周期调用定时处理函数 )) == 0) { printf("start!!!!!!!!!!!\n"); } else { printf("end!!!!!!!!!!!\n"); } int temp = 0; if(setjmp(j) == 0){ temp = longTimeFunction(); }else{ printf("xxxxxx...\n"); temp = -1; } printf("%d\n", temp); return 0; } ``` ![图片说明](https://img-ask.csdn.net/upload/201607/30/1469849217_947073.png)
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的Tencent Kona JDK,分布式HTAP数据库 TBase,企业级容器平台TKEStack,以及高性能图计算框架Plato。短短一周之内,腾讯开源了五大重点项目。其中,TubeMQ是腾讯大数据平台部门应用的核心组件,...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问