ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#-C互操作性

2019-12-08 21:18:51  阅读:320  来源: 互联网

标签:interop c-3 c


link text处的Q / A非常接近我要寻找的内容,但是我只是开始使用C#,并且需要填写一些内容,并且可能会提示一些关于最佳处理方式的提示.

我有一个用Javascript为PalmPre / webOS编写的应用程序,其中一部分是用C编写的,以实现可移植性,而不是性能.它执行Lear Jet性能计算.

在webOS世界中,C代码(插件)按其自身的过程运行,并且JS有一种方法可以调用和调用C代码(使用“ main”)来启动过程,并且C可以注册入口点.然后,JS可以使用一些参数调用入口点,C代码进行计算,然后C将指向数字字符串的指针返回给JS进行显示. C代码没有图形,没有动态内存分配,等等.我想将JS GUI代码本质上转换为C#,并使用对C#进行细微调整(#if)的C代码来执行与JS相同的操作Pre现在开始.

答案1 / option2我认为是最好的,但是我不明白他所说的“您的项目与消费者项目”的含义,以及为什么/为什么这意味着一个是dllimport,一个是dllexport,而我没有DLL ,我只有C代码例程.看来我要做的就是用我的C例程替换他的“ PublicFunc”,对吗?我可以在其中标有“ params”的地方使用多个args吗?但是,没有指定返回类型,我该如何返回C#的答案? “ returntype”是保留字吗?还是示例占位符?还是因为没有DLL而使我偏离轨道?顺便说一句,C代码确实有一种模式可以编译为作为DOS程序独立运行以进行测试.

是否有任何简单的示例代码说明了如何执行此操作?我现在正在下载MS VS 2010 Express,尚未安装.也许那里有东西?

TIA!

解决方法:

多亏了每个回答的人,所有的事情都几乎没有答案.因此,对于那些可能会问我同样问题的人,我将发布我编写的代码,以试验所需的链接.

//这是C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;     // DLL support
namespace ConsoleApplication1
{
  class Program
  {
    [DllImport("dodll.dll",
           CallingConvention = CallingConvention.Cdecl)]
    [return: MarshalAs(UnmanagedType.LPStr)]
    private static extern string dodll(int a, int b,
                       [MarshalAs(UnmanagedType.LPArray)] float[] nums,
                       [MarshalAs(UnmanagedType.LPStr)] string strA,
                       [MarshalAs(UnmanagedType.LPStr)] string strB);

static void Main(string[] args)
{
  int x = 2; int y = 3;
  float[] numbers = new float[3]{12.3F, 45.6F, 78.9F};
  float[] simargs = new float[20];

  string strvarA = "Test string A";
  string strvarB = "Test another string";
  string answer = dodll(x, y, numbers, strvarA, strvarB);
  Console.WriteLine("hello world " + answer);
  Console.WriteLine("another hello world" + x);
  Console.WriteLine("End of sim");
}

}
}

//这是C代码(DLL):

#include <stdio.h>
char astring[50];
//Passing structure pointer info: http://www.adp-gmbh.ch/win/misc/mingw/dll.html
extern "C"
{  __declspec(dllexport) 
char* dodll( long a, long b, float* aptr, char* sa, char* sb)
{
    float nums[3];
    nums[0] = *aptr;
    nums[1] = *(aptr+1);
    nums[2] = *(aptr+2);
  sprintf(astring, "Building string: %s %s %ld, nrs are %2.1f, %2.1f, %2.1f.\n",
  sa, sb, (a+b), nums[0], nums[1], nums[2]);
  printf("Inside DLL: %s\n", astring);
  return astring;
}
}

标签:interop,c-3,c
来源: https://codeday.me/bug/20191208/2094255.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有