标签: c++-cli

Delphi 5调用C++ DLL导致访问冲突

以下是调用C++/CLI DLL的Delphi代码:

implementation

{$R *.DFM}

procedure CallMe(x: Integer); stdcall; external 'CppWrapper.dll';

procedure TForm1.Button1Click(Sender: TObject); 
begin
  CallMe(1); 
end;

end.
Run Code Online (Sandbox Code Playgroud)

单击表单按钮后,我得到一个例外.

delphi c++-cli

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

C++ Windows窗体应用程序是否需要.NET Framework?

C++ Windows窗体应用程序是否需要.NET Framework?

它似乎是因为它导入了"System :: Forms",但我只想100%肯定.我尝试用依赖打开它,看起来它导入了通常的C++ dll,但是没有任何关于框架的东西.

forms windows frameworks c++-cli

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

确定颜色位图是否为黑色和白色

我有一个HBitmap,我从我用来转换PDF文档中的页面的API中收到.生成的位图是24位彩色位图.我试图确定,使用制作成pdfs的黑白扫描图像,在Foxit生成的位图上是黑白的.Foxit是PDF API.这是一些代码!(C/CLI)

// Get HBITMAP using Foxit's RenderPage function
// to convert to dib later
IntPtr hbitmap = FlattenPageToHBitmap(filename, page);

if (hbitmap == IntPtr::Zero) 
    return IntPtr::Zero;

Bitmap^ b = Bitmap::FromHbitmap(hbitmap);

bool isColor = false;
for (int y = 0; y < b->Height; y++)
{
    for (int x = 0; x < b->Width; x++)
    {
         Color^ c = b->GetPixel(x, y);
         unsigned int bits = (int)c->ToArgb();
         bits = bits << 8;
         bits = bits >> 8; //should get rid of A in …
Run Code Online (Sandbox Code Playgroud)

gdi+ c++-cli bitmap foxit visual-c++

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

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

SendKeys :: Send,be berserk

我正在尝试更新两个链接TextBoxes.我在一个中禁用事件然后使用例如SendKeys::Send("A");首先给它焦点发送击键:

texBox2->Focus();
texBox2->KeyDown -= gcnew KeyEventHandler(this, &Form1::texBox2_KeyDown);
SendKeys::Send("A");
texBox2->KeyDown += gcnew KeyEventHandler(this, &Form1::texBox2_KeyDown);
Run Code Online (Sandbox Code Playgroud)

几乎可以工作,但完全是心理而不是重复这个角色(我不敢去检查哪个确切的键因为我疯狂地消防溢出)直到我按下control-alt-del.没有其他键有任何影响,鼠标冻结.但任务经理奇迹般地恢复了我的控制权,我不会停止或杀死任何东西.

任何人都可以建议吗?调试器挂起在该SendKeys::Send("A");语句上.

.net c++-cli hang infinite-loop sendkeys

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

如何提取由空格分隔的字符串的一部分?

如果我有字符串:

String^ str ="hhB2LWq50a+9HZiNLKuwdQ==.pdf aaaaaaaa bbbbbbbbb cccccdddddeee ffffffgggghhh";
Run Code Online (Sandbox Code Playgroud)

我想提取它的第一部分

hhB2LWq50a+9HZiNLKuwdQ==.pdf

如何在C++/CLI或C#中做到这一点?

c# c++-cli

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

将标准C++字符串转换为String ^

我想在Visual C++环境中将std :: string转换为System :: String ^.我知道我们可以通过MarshalStringFunction 将System :: String转换为std :: string,如下所示:

void MarshalString ( String ^ s, string& os ) {
    using namespace Runtime::InteropServices;
    const char* chars = 
        (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
    os = chars;
    Marshal::FreeHGlobal(IntPtr((void*)chars));
}
Run Code Online (Sandbox Code Playgroud)

我找不到将std :: string转换为System :: String的方法,但我发现System :: String的构造函数带有如下参数:

System::String(Char* value, Int32 startIndex, Int32 length)
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的代码,但它无法给我一个正确的解决方案:

std::string str1 = "MyString";
System::String^ str = new System::String(str1.c_str(), 0, str1.length());
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?

string c++-cli stdstring visual-c++

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

更改XmlElement Name属性

我想在c ++/cli中更改XmlElement的Name属性.

我想这样做myXmlElem.Name = "xyz",但编译器告诉我,我不能对Name属性进行set操作.

<abc/>
Run Code Online (Sandbox Code Playgroud)

变成

<xyz/>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

谢谢!

c# xml replace c++-cli

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

导出使用托管句柄的类?

我正在尝试在C++/CLI中围绕.Net库创建一个本机包装器,以便常规C++代码可以使用它.对于这个例子,假设这是我试图包装的C#代码:

class Foo
{
    public Bar GetBar() {...}
    public string SomeProperty { get; set; }
}

class Bar
{
    public void Baz() {...}
}
Run Code Online (Sandbox Code Playgroud)

我基本上是在C++/CLI(dll项目)中大致尝试这样做:

class __declspec(dllexport) NativeFoo
{
public:
    NativeBar GetBar();
    std::string GetName();
    void SetName(const std::string &value);

private:
    Foo ^m_foo;
};

class __declspec(dllexport) NativeBar
{
    friend class NativeFoo;
public:
    void Baz();

private:
    Bar(Bar ^bar);

    Bar ^m_bar;
};
Run Code Online (Sandbox Code Playgroud)

这样,C++库可以链接到这个,使用NativeFoo就好像它是一个普通的C++类.在内部,NativeFoo将转换参数以将实现传递给m_foo,将任何管理的内容编组回本机表示并将其返回给其调用者...

但是,我遇到的问题是我不能拥有非托管类的托管成员:

error C3265: cannot declare a managed 'm_bar' in an unmanaged 'NativeFoo'
Run Code Online (Sandbox Code Playgroud)

类似地,我不能将NativeFoo标记为"ref"(作为托管类本身)因为那时我无法导出它:

C3386: 'NativeFoo' : __declspec(dllexport)/__declspec(dllimport) cannot be applied to …
Run Code Online (Sandbox Code Playgroud)

c++-cli

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

C ++ / CLI并使用System :: Linq无法正常工作

我在Visual Studio 2015中创建了一个新的C ++ CLR项目,并想尝试在C ++中使用Linq功能。为此,我想包含名称空间System :: Linq。不幸的是VS声称

Error   C2039   'Linq': is not a member of 'System' ConsoleApplication1 
Run Code Online (Sandbox Code Playgroud)

这是整个代码:

using namespace System;
using namespace System::Linq;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何使它工作?

.net c++-cli

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