dll是用c ++编写的,通过const char*回调发送文本作为utf8 .
首先,这是声明回调的正确方法吗?
[UnmanagedFunctionPointer( CallingConvention.StdCall )]
public delegate void TextCallback( string sText );
[DllImport(
    "cppLib.dll",
    CharSet = CharSet.Ansi,
    CallingConvention = CallingConvention.Cdecl )]
public static extern void GetText(
    [MarshalAs( UnmanagedType.FunctionPtr )] TextCallback textCallback );
private TextCallback m_TextCallback;
本地回调:
typedef void ( __stdcall * TextCallback )( const char* szText );
如果是这样,我如何处理utf8文本?
我将它发送到RichTextBox并且utf8字符作为垃圾出现(那些碰巧是ascii打印正常).
谢谢你们.
回答
在下面的评论中,TheUndeadFish提供了一个有效答案的链接.它也在一定程度上得到了解释.有兴趣的人应该看看.我只是在这里复制答案,因为它适用于我发布的代码.
只需要进行此修改:
[UnmanagedFunctionPointer( CallingConvention.StdCall )]
public delegate void TextCallback( IntPtr ipText );
委托重新解释int指针(指向c ++ dll中的utf8字符串),如下所示:
m_TextCallback = ( ipText ) =>
{ …配置VirtualBox以运行Windows 8和vs2012以进行WinRT开发(商店应用程序等)的最佳设置(以及最佳方式)是什么?
我的机器规格是64位Intel Core i7-2600 CPU @ 3.40GHz,带8G RAM.
任何建设性的建议都是最受欢迎的.请尽可能详细.
先谢谢大家.
本文...
http://www.codeproject.com/Articles/4528/Use-IRichEditOle-from-C
...显示了如何在C#中获取IRichEditOle COM接口。到目前为止,一切都很好。
我一直在写代码以获取C#中的ITextDocument接口。
(顺便说一句,我需要它来访问Undo(tomSuspend,NULL),因此,如果存在解决方法,那将是受欢迎的)
c# ×2
c++ ×1
callback ×1
com ×1
dll ×1
ole ×1
richeditbox ×1
utf-8 ×1
virtualbox ×1
windows-8 ×1