soft5257 2015-05-03 19:55 采纳率: 0%
浏览 1701

如何用C#调用这个C++dll的函数

extern "C" PB_RESULT __declspec(dllexport)CRDR_ReadData(OUT char* lpBuffer, IN DWORD dwBufferSize,
OUT DWORD lpNumberOfBytesRead)
{
WriteLog4("[CRDR_ReadData]dwBufferSize=%d",dwBufferSize);
if (m_crdr.m_ptrarrayCardInfo.GetSize()>0)
{
CARD_INFO *pCardInfo = NULL;
pCardInfo = (CARD_INFO
)m_crdr.m_ptrarrayCardInfo.GetAt(0);
int nLenth = strlen(pCardInfo->cardno)+1;
//DWORD dLen = nLenth + 1;
memcpy(lpBuffer,pCardInfo->cardno,nLenth);
*lpNumberOfBytesRead = nLenth-1;
if (pCardInfo != NULL)
delete pCardInfo;
m_crdr.m_ptrarrayCardInfo.RemoveAt(0);
WriteLog4("[CRDR_ReadData]lpBuffer=%s,nLenth=%d",lpBuffer,*lpNumberOfBytesRead);
}

return PB_OK;
}

  • 写回答

4条回答 默认 最新

  • zzkjliu 2015-05-03 20:18
    关注

    P/Invoke C++ Interop

    评论
  • oyljerry 2015-05-03 20:26
    关注
    评论
  • soft5257 2015-05-03 22:34
    关注

    谢谢大家!

    我现在就是不知道“OUT char* lpBuffer” 应该怎么定义,我使用StringBuilder、String、byte都会闪退,当使用IntPtr可以执行成功,但是从C++中写不进去数据。

    评论
  • Eleven 2015-05-03 22:50
    关注

    第一个参数用IntPtr,然后利用Marshal.AllocHGlobal()分配,最后释放Marshal.FreeHGlobal()

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 求一个按键录像存储到内存卡的ESP32CAM代码
  • ¥15 如何单独修改下列canvas推箱子代码target参数?,插入图片代替其形状,就是哪个绿色的圆圈每关用插入的图片替代
  • ¥20 四叉树的创建和输出问题
  • ¥15 javaweb连接数据库,jsp文件加载不出来
  • ¥15 matlab关于高斯赛德尔迭代的应用编撰。(相关搜索:matlab代码|迭代法)
  • ¥15 损失匹配问题,求解答
  • ¥15 3500常用汉字书法体检测数据集下载
  • ¥15 odoo17在制造模块或采购模块良品与次品如何分流和在质检模块下如何开发
  • ¥15 Qt音乐播放器的音乐文件相对路径怎么写
  • ¥15 VB.NET利用摄像头拍照的程序
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部