如何将返回指针从C ++ dll函数返回到C#

塞尔汉·埃尔科万

我有两个外部函数,其中一个是返回C ++指针,另一个是打印ip和端口,当我想在C#上使用时,参数比打印端口和ip成功通过,之后我调用第二个函数时,它不能正确打印地址。

Cpp

Obj* x_create_obj_ip_port(const char* ip, int port) {
    Obj* obj = new Obj();
    cout << ip << endl;
    obj->ip = (char*)ip;
    cout << obj->ip << endl;
    obj->port = 102;

    return obj;
}

Obj::Obj() {
    this->counter = 0;
    this->ip = (char*)"";
    this->port = 0;
    this->something = (char*)"";
    this->cid = false;
    this->gi = false;
    this->report = false;
    this->signals_counter = 0;
    this->Tada = nullptr;
    
}

void print_ip(Obj* obj) {
    cout << "object ip " <<obj->ip << endl;
    cout << "Object port " << obj->port << endl;
    //cout << "connection ip " << obj->connection->ip << endl;
}

和C#端

[DllImport(DllPath.path, CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr x_create_obj_ip_port(string ip, int port);

[DllImport(DllPath.path, CallingConvention = CallingConvention.Cdecl)]
        private static extern void print_ip(IntPtr self);

IntPtr _con = new IntPtr();
           
_con = x_create_obj_ip_port("10.6.35.228", 102);

print_ip(_con);

日志如下所示:

Badbouille

我想我知道了你的问题。

在x_create_obj_ip_port中,使用参数ip上的指针设置obj-> ip。我不是C#专家,但是我很确定在调用后立即删除了字符串“ 10.6.35.228”,这意味着obj-> ip指向无内容,这解释了为什么print_ip打印垃圾信息。

如果要将参数的内容保留在结构中以供以后使用,则应复制该参数,而不仅仅是将指针保存在该结构上,因为任何人都可以删除它。

换句话说,您可以更改对象,因此ip是一个包含实际ip的表,而不仅仅是一个指针。这样,您可以在调用x_create_obj_ip_port时“填充” ip

class Obj {
  // ...
  // was const char *ip;
  char ip[128];
  // ...
}
#include <string.h>

Obj* x_create_obj_ip_port(const char* ip, int port) {
    // ...
    strncpy(this->ip, ip, sizeof(this->ip)); // deep copy of source ip
    // ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系deb[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C语言如何将指针从函数返回到指针

来自分类Dev

从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

来自分类Dev

如何将类从C ++代码返回到C#

来自分类Dev

将int数组从C ++ .dll返回到C#

来自分类Dev

C:如何将多个值从函数返回到main

来自分类Dev

调用函数并将输出返回到C#中的外部DLL

来自分类Dev

C-如何将指针值返回给main?

来自分类Dev

Oracle 函数将行返回到 C#

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

如何使用C#接口将C ++智能指针返回到PowerPoint接口

来自分类Dev

MEX:如何将矩阵从C ++ / C返回到MATLAB

来自分类Dev

将C ++函数包装在返回指针的c#中

来自分类Dev

如何将指针从C#传递到DLL中的本机函数?

来自分类Dev

如何将函数指针作为const返回?

来自分类Dev

如何将函数指针作为const返回?

来自分类Dev

如何使用inline-c来包装将指针返回到自定义结构类型的函数?

来自分类Dev

如何将数组从ac#dll返回到php

来自分类Dev

将记录表从Oracle函数返回到C#应用程序

来自分类Dev

导出托管的C#函数以将更改的char *参数返回到非托管代码

来自分类Dev

将Javascript变量传递给C#函数aspx并从其返回到aspx页面

来自分类Dev

将int array []或指向int array []的指针返回到C中的调用例程的函数

来自分类Dev

使用指针将字符和浮点值从 scanf 返回到主函数 C

来自分类Dev

将结构数组从c返回到c#

来自分类Dev

如何将值从递归函数返回到数组

来自分类Dev

如何将值从SOAP函数返回到流星方法?

来自分类Dev

如何将Promise.all()。then返回到函数

来自分类Dev

如何将字符串从函数返回到 main()?

来自分类Dev

如何将数据从 PHP 返回到 ajax 函数

Related 相关文章

  1. 1

    C语言如何将指针从函数返回到指针

  2. 2

    从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

  3. 3

    如何将类从C ++代码返回到C#

  4. 4

    将int数组从C ++ .dll返回到C#

  5. 5

    C:如何将多个值从函数返回到main

  6. 6

    调用函数并将输出返回到C#中的外部DLL

  7. 7

    C-如何将指针值返回给main?

  8. 8

    Oracle 函数将行返回到 C#

  9. 9

    将数组地址从函数返回到指针(C ++)

  10. 10

    将数组地址从函数返回到指针(C ++)

  11. 11

    如何使用C#接口将C ++智能指针返回到PowerPoint接口

  12. 12

    MEX:如何将矩阵从C ++ / C返回到MATLAB

  13. 13

    将C ++函数包装在返回指针的c#中

  14. 14

    如何将指针从C#传递到DLL中的本机函数?

  15. 15

    如何将函数指针作为const返回?

  16. 16

    如何将函数指针作为const返回?

  17. 17

    如何使用inline-c来包装将指针返回到自定义结构类型的函数?

  18. 18

    如何将数组从ac#dll返回到php

  19. 19

    将记录表从Oracle函数返回到C#应用程序

  20. 20

    导出托管的C#函数以将更改的char *参数返回到非托管代码

  21. 21

    将Javascript变量传递给C#函数aspx并从其返回到aspx页面

  22. 22

    将int array []或指向int array []的指针返回到C中的调用例程的函数

  23. 23

    使用指针将字符和浮点值从 scanf 返回到主函数 C

  24. 24

    将结构数组从c返回到c#

  25. 25

    如何将值从递归函数返回到数组

  26. 26

    如何将值从SOAP函数返回到流星方法?

  27. 27

    如何将Promise.all()。then返回到函数

  28. 28

    如何将字符串从函数返回到 main()?

  29. 29

    如何将数据从 PHP 返回到 ajax 函数

热门标签

归档