Example #1
0
extern "C" DLL_EXPORT LPSTR MarshalPointer_InOut(/*[in,out]*/LPSTR *s)
{
    //Check the Input
    size_t len = strlen(*s);

    if((len != lenstrManaged)||(memcmp(*s,strManaged,len)!=0))
    {
        printf("Error in Function MarshalPointer_InOut\n");
        
        for(size_t i = 0; i< lenstrManaged;++i)
            putchar(*(((char *)strManaged)+i));
                
        for( size_t j = 0; j < len; ++j)
            putchar(*(((char *)*s) + j));
        
        return ReturnErrorString();
    }

    //Allocate New
    CoreClrFree(*s);
    *s = (LPSTR)CoreClrAlloc(sizeof(char)*(lenstrNative+1));
    memset(*s,0,lenstrNative+1);
    strncpy_s(*s,len + 1,strNative,lenstrNative);

    //Return
    return ReturnString();
}
extern "C" DLL_EXPORT void __cdecl DoSCallBack_LPSTR_InByRef(SCallBackInByRef callback)
{
    const char* pTemp = "AAAA";
    size_t len = strlen(pTemp) + 1;
    LPSTR pStr = (LPSTR)CoreClrAlloc(len);
    strncpy(pStr, pTemp, len);

    if (!CheckInput(callback(&pStr)))
    {
        ReportFailure("DoSCallBack_LPSTR_InByRef:NativeSide");
    }
    CoreClrFree(pStr);
}
extern "C" DLL_EXPORT void __cdecl DoSCallBack_LPSTR_OutByRef(SCallBackOutByRef callback)
{
    size_t len = 10;
    LPSTR pStr = (LPSTR)CoreClrAlloc(len);

    if (!CheckInput(callback(&pStr)))
    {
        ReportFailure("DoSCallBack_LPSTR_OutByRef:NativeSide,the first check");
    }
    if (!CheckInput(pStr))
    {
        ReportFailure("DoSCallBack_LPSTR_OutByRef:NativeSide,the second Check");
    }
    CoreClrFree(pStr);
}
extern "C" DLL_EXPORT void __cdecl DoCCallBack_LPSTR_Out(CCallBackOut callback)
{
    size_t len = 10;
    LPSTR pStr = (LPSTR)CoreClrAlloc(len);

    //Check the return value
    if (!CheckInput(callback(pStr)))
    {
        ReportFailure("DoCCallBack_LPSTR_Out:NativeSide,the first check");
    }
    if (!CheckInput(pStr))
    {
        ReportFailure("DoCCallBack_LPSTR_Out:NativeSide,the Second Check");
    }
    CoreClrFree(pStr);
}
extern "C" DLL_EXPORT void __cdecl DoCCallBack_LPSTR_InOut(CCallBackInOut callback)
{
    const char* pTemp = "AAAA";
    size_t len = strlen(pTemp) + 1;
    LPSTR pStr = (LPSTR)CoreClrAlloc(len);
    strncpy(pStr, pTemp, len);

    if (!CheckInput(callback(pStr)))
    {
        ReportFailure("DoCCallBack_LPSTR_InOut:NativeSide,the first check");
    }
    if (!CheckInput(pStr))
    {
        ReportFailure("DoCCallBack_LPSTR_InOut:NativeSide,the Second Check");
    }
    CoreClrFree(pStr);
}
Example #6
0
extern "C" DLL_EXPORT BOOL __cdecl RPinvoke_DelMarshal_InOut(Test_DelMarshal_InOut d, /*[in]*/ LPCSTR s)
{
    LPCWSTR str = d(s);
    LPCWSTR ret = W("Return");    

    size_t lenstr = wcslen(str);
    size_t lenret = wcslen(ret);

    if((lenret != lenstr)||(wcsncmp(str,ret,lenstr)!=0))
    {
        printf("Error in RPinvoke_DelMarshal_InOut, Returned value didn't match\n");
        return FALSE;
    }
    
    CoreClrFree((LPVOID)str);

    return TRUE;
}