小编Lar*_*ara的帖子

C++ dll将utf8作为const char*发送,c#需要做...什么?

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;
Run Code Online (Sandbox Code Playgroud)

本地回调:

typedef void ( __stdcall * TextCallback )( const char* szText );
Run Code Online (Sandbox Code Playgroud)

如果是这样,我如何处理utf8文本?

我将它发送到RichTextBox并且utf8字符作为垃圾出现(那些碰巧是ascii打印正常).

谢谢你们.

回答

在下面的评论中,TheUndeadFish提供了一个有效答案的链接.它也在一定程度上得到了解释.有兴趣的人应该看看.我只是在这里复制答案,因为它适用于我发布的代码.

只需要进行此修改:

[UnmanagedFunctionPointer( CallingConvention.StdCall )]
public delegate void TextCallback( IntPtr ipText );
Run Code Online (Sandbox Code Playgroud)

委托重新解释int指针(指向c ++ dll中的utf8字符串),如下所示:

m_TextCallback = ( ipText ) =>
{ …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll callback utf-8

9
推荐指数
1
解决办法
2102
查看次数

使用Windows 8和vs2012的dev的最佳VirtualBox设置

配置VirtualBox以运行Windows 8和vs2012以进行WinRT开发(商店应用程序等)的最佳设置(以及最佳方式)是什么?

我的机器规格是64位Intel Core i7-2600 CPU @ 3.40GHz,带8G RAM.

任何建设性的建议都是最受欢迎的.请尽可能详细.

先谢谢大家.

virtualbox windows-8 visual-studio-2012

7
推荐指数
1
解决办法
1万
查看次数

在C#中为RichTextBox获取ITextDocument

本文...

http://www.codeproject.com/Articles/4528/Use-IRichEditOle-from-C

...显示了如何在C#中获取IRichEditOle COM接口。到目前为止,一切都很好。

我一直在写代码以获取C#中的ITextDocument接口。

(顺便说一句,我需要它来访问Undo(tomSuspend,NULL),因此,如果存在解决方法,那将是受欢迎的)

c# com ole richeditbox

3
推荐指数
1
解决办法
686
查看次数

标签 统计

c# ×2

c++ ×1

callback ×1

com ×1

dll ×1

ole ×1

richeditbox ×1

utf-8 ×1

virtualbox ×1

visual-studio-2012 ×1

windows-8 ×1