小编xcv*_*cvd的帖子

C++/CLI委托作为函数指针(System.AccessViolationException)

我一直在试验C++/CLI委托(因为我正在尝试创建一个.NET参考库),我遇到了以下问题.

我在C++/CLI中定义委托,然后在C#中创建委托的实例,然后通过非托管C++通过函数指针调用委托的实例.这一切都按预期工作.

代码来说明这一点(首先是我的C#)

using System;

namespace TestProgram
{
    class Program
    {
        static void Main(string[] args)
        {
            Library.Test.MessageDelegate messageDelegate = new Library.Test.MessageDelegate(Message);
            Library.Test test = new Library.Test(messageDelegate);
            test.WriteMessage();
            Console.Read();
        }

        static void Message()
        {
            Console.WriteLine(1024);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来我的托管c ++文件(Managed.cpp)

#include "Unmanaged.hpp"
#include <string>

namespace Library
{
    using namespace System;
    using namespace System::Runtime::InteropServices;

    public ref class Test
    {
    public:
        delegate void MessageDelegate();
    internal:
        MessageDelegate^ Message;
        void* delegatePointer;

    public:
        Test(MessageDelegate^ messageDelegate)
        {
            delegatePointer = (void*)Marshal::GetFunctionPointerForDelegate(messageDelegate).ToPointer();
        }

        void WriteMessage()
        {
            Unmanaged::WriteMessage(delegatePointer);
        }
    }; …
Run Code Online (Sandbox Code Playgroud)

.net interop c++-cli c#-4.0

18
推荐指数
1
解决办法
9379
查看次数

不兼容的类型错误Java和int之间的Java.不确定原因

在下面的代码中,我有一个错误"可能发现精度损失:int required:short".我理解错误意味着什么,但我只是想知道为什么我会得到它.当然函数应该返回一个short类型(我看不出如何可能有任何精度损失,代码应该返回一个16位整数).任何人都可以为我清理为什么以下代码似乎需要类型int?

static short a() {
    short[] payload = {
            100, 200, 300,
            400, 500, 600,
            700, 800, 900, 1000
    };
    short offset = 2;
    return (payload[offset - 2] << 8 & 0xff00) + (payload[offset - 1] & 0xff);
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

java precision bit-manipulation

8
推荐指数
1
解决办法
812
查看次数

我自己的托管类型为C++/CLI类库中的arg:CS0570:该语言不支持

我一直在尝试开发一个用于C#的C++/CLI库,我遇到了以下问题.如果我们将我的托管引用类如下:

namespace Library
{
using namespace System;

public ref class Test
{
internal:
    String^ internalString;
public:
    Test()
    {
        internalString = gcnew String("Hey There");
    }
    ~Test()
    {

    }
};

public ref class TestImplement
{
public:
    static String^ TestMessage(Test test)
    {
        return test.internalString;
    }
};
}
Run Code Online (Sandbox Code Playgroud)

我的C#实现如下:

使用系统;

namespace AddProgram
{
class Program
{
    static void Main(string[] args)
    {
        Library.Test test = new Library.Test();
        Console.WriteLine(Library.TestImplement.TestMessage(test));
        Console.Read();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

错误CS0570:该语言不支持"TestMessage"

据我所知,这是由于将类型Library.Test作为参数传递.我不明白为什么我收到此消息,我希望可以从我的参考库传递类型.

任何帮助,将不胜感激

.net interop c++-cli c#-4.0

5
推荐指数
1
解决办法
2407
查看次数

F# 游戏开发:修改状态变量

open SFML.Graphics
open SFML.Window

let window = new RenderWindow(new VideoMode(200u, 200u), "SFML works!")
let shape = new CircleShape(10.0f, FillColor=Color.Green)
let mutable pressedKey = Keyboard.Key.Unknown

let moveKeys = [ Keyboard.Key.Up; Keyboard.Key.Left;
                 Keyboard.Key.Down; Keyboard.Key.Right ]

let keyPress (e : KeyEventArgs) =
    match e.Code with
    | moveKeys -> pressedKey <- e.Code
    | _ -> pressedKey <- Keyboard.Key.Unknown

let keyRelease (e : KeyEventArgs) =
    let pressedKeys = List.filter (fun key -> Keyboard.IsKeyPressed(key)) moveKeys
    if pressedKeys.IsEmpty then pressedKey <- Keyboard.Key.Unknown
    else pressedKey <- pressedKeys.Head

window.Closed.Add(fun …
Run Code Online (Sandbox Code Playgroud)

.net c# f#

5
推荐指数
1
解决办法
448
查看次数

foreach in return to return value

def a: Int = {
  for(i <- Array(1,2,3,4,5)){
    if(i == 3)
      return i
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的方法不会编译,我得到以下错误:

error: type mismatch;
 found   : Unit
 required: Int
       for(i <- Array(1,2,3,4,5)){
             ^
Run Code Online (Sandbox Code Playgroud)

预期的行为是该方法返回3.我的代码有什么问题?

methods foreach scala

2
推荐指数
1
解决办法
8005
查看次数

标签 统计

.net ×3

c#-4.0 ×2

c++-cli ×2

interop ×2

bit-manipulation ×1

c# ×1

f# ×1

foreach ×1

java ×1

methods ×1

precision ×1

scala ×1