CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3

Hybrid View

  1. #1
    Join Date
    May 2011
    Posts
    0

    Cant send array from client (WinAPI / Remote Procedure Call)

    I have almost completed this very hard task on VS 2005 C++. There is is only part of prog, that I need to fix

    Client:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <iostream>
    #include <ctype.h>
    #include <windows.h>
    #include "hello.h"
    using namespace std;
    #pragma comment(lib,"rpcndr.lib")
    #pragma comment(lib,"rpcns4.lib")
    #pragma comment(lib,"rpcrt4.lib")
    
    void main()
    {
      char buffer[8] = "";
    	int N;
    	int k = 0;
    	while(k==0)
    	{
    		printf("Enter size of matrix (from 2 to 20): N=");
    		scanf ("%d", &N);
    		sprintf(buffer, "%d", N);
    		if ((N<2) || (N>20)) k=0;
    		else k=1;
    	}
    	unsigned short matrix [20][20];
    	cout << "Fill the matrix:\n";
    	for (size_t i = 0; i < N; ++i) 
    	{
    		for (size_t j = 0; j < N; ++j)
    		{
    			cin >> matrix[i][j];
    		}
    	}
    	cout << "\nCurrent matrix... \n";
    	for (size_t i = 0; i < N; ++i) 
    	{
    		for (size_t j = 0; j < N; ++j) 
    		{
    			cout << matrix[i][j] << "  ";
    		}
    		cout << endl << endl;
    	}
    RPC_STATUS status;
    const char* pszUuid = "906B0CE0-C70B-1067-B317-00DD010662DC";
    const char* pszProtocolSequence = "ncacn_np";
    const char* pszNetworkAddress = "127.0.0.1";
    const char* pszEndpoint = "\\pipe\\he";
    const char* pszOptions = NULL;
    const char* pszStringBinding = NULL;
    long ulCode=0;
    status = RpcStringBindingCompose((RPC_CSTR)pszUuid,(RPC_CSTR) pszProtocolSequence, (RPC_CSTR)pszNetworkAddress, (RPC_CSTR)pszEndpoint, (RPC_CSTR)pszOptions, (RPC_CSTR*)&pszStringBinding);
    if (status) exit(status);
    status = RpcBindingFromStringBinding((RPC_CSTR)pszStringBinding, &hello_IfHandle);
    if (status) exit(status);
    RpcTryExcept
    {
    	HelloProc((unsigned char *)buffer, (unsigned char **) matrix);
    	Shutdown();
    }
    RpcExcept(1)
    {
    	ulCode = RpcExceptionCode();
    	printf("Runtime reported exception 0x%lx = %ld\n", ulCode, ulCode);
    } 
    RpcEndExcept
        status = RpcStringFree ((RPC_CSTR*)&pszStringBinding);
        if (status)    exit (status);
    status = RpcBindingFree(&hello_IfHandle);
    if (status) exit(status);
    system("pause");
    }
    
    void __RPC_FAR* __RPC_USER midl_user_allocate(size_t len)
    {
    return(malloc(len));
    }
    
    void __RPC_USER midl_user_free(void __RPC_FAR* ptr)
    {
    free(ptr);
    }
    Server:
    Code:
    // lab7_server.cpp : Defines the entry point for the console application.
    //
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <ctype.h>
    #include <iostream>
    #include "hello.h"
    using namespace std;
    
    #pragma comment(lib,"RpcNdr.lib")
    #pragma comment(lib,"Rpcns4.lib")
    #pragma comment(lib,"RpcRT4.lib")
    
    void main()
    {
    	char buffer[8];
    	char matrix[20][20];
    
    RPC_STATUS status;
    const char* pszProtocolSequence = "ncacn_np";
    const char* pszSecurity = NULL;
    const char* pszEndpoint = "\\pipe\\he";
    const int cMinCalls = 1;
    const int cMaxCalls = 20;
    const int fDontWait = FALSE;
    status = RpcServerUseProtseqEp((RPC_CSTR)pszProtocolSequence, cMaxCalls, (RPC_CSTR)pszEndpoint, (RPC_CSTR)pszSecurity);
    if (status) exit(status);
    status = RpcServerRegisterIf(hello_v1_0_s_ifspec, NULL, NULL);
    if (status) exit(status);
    status = RpcServerListen(cMinCalls, cMaxCalls, fDontWait);
    if (status) exit(status);
    } 
    
    void HelloProc(unsigned char * buffer, unsigned char ** matrix)
    {		
    	int N;
    	N=atoi((char*)buffer);
    	cout << "Size of matrix from client= " << N << endl;
    	int **matrix_transfered = new int*[N];
    	for (size_t i = 0; i < N; ++i) 
    	{
    		matrix_transfered[i] = new int[N];
    	}
    	for (size_t i = 0; i < N; ++i) 
    	{
    		for (size_t j = 0; j < N; ++j)
    		{	
    			matrix_transfered[i][j]=atoi((const char *) matrix[i][j]);
    		}
    	}
    	
    	cout << "\nMatrix from client... \n";
    	for (size_t i = 0; i < N; ++i) 
    	{
    		for (size_t j = 0; j < N; ++j) 
    		{
    			cout << matrix_transfered[i][j] << "  ";
    		}
    		cout << endl << endl;
    	}
    	system("PAUSE");
    }
    void Shutdown(void)
    {
    RPC_STATUS status;
    printf("Вызываем RpcMgmtStopServerListening\n");
    status = RpcMgmtStopServerListening(NULL);
    printf("RpcMgmtStopServerListening returned: 0x%x\n", status);
    if (status)
    {
    exit(status);
    }
    printf("Вызываем RpcServerUnregisterIf\n");
    status = RpcServerUnregisterIf(NULL, NULL, FALSE);
    printf("RpcServerUnregisterIf возвратила 0x%x\n", status);
    if (status)
    {
    exit(status);
    }
    }
    void __RPC_FAR* __RPC_USER midl_user_allocate(size_t len)
    {
    return(malloc(len));
    }
    void __RPC_USER midl_user_free(void __RPC_FAR* ptr)
    {
    free(ptr);
    }
    Hello.h:
    Code:
    /* this ALWAYS GENERATED file contains the definitions for the interfaces */
    
    
     /* File created by MIDL compiler version 6.00.0366 */
    /* at Sat May 28 09:27:22 2011
     */
    /* Compiler settings for hello.idl:
        Oicf, W1, Zp8, env=Win32 (32b run)
        protocol : dce , ms_ext, c_ext, robust
        error checks: allocation ref bounds_check enum stub_data 
        VC __declspec() decoration level: 
             __declspec(uuid()), __declspec(selectany), __declspec(novtable)
             DECLSPEC_UUID(), MIDL_INTERFACE()
    */
    //@@MIDL_FILE_HEADING(  )
    
    #pragma warning( disable: 4049 )  /* more than 64k source lines */
    
    
    /* verify that the <rpcndr.h> version is high enough to compile this file*/
    #ifndef __REQUIRED_RPCNDR_H_VERSION__
    #define __REQUIRED_RPCNDR_H_VERSION__ 475
    #endif
    
    #include "rpc.h"
    #include "rpcndr.h"
    
    #ifndef __RPCNDR_H_VERSION__
    #error this stub requires an updated version of <rpcndr.h>
    #endif // __RPCNDR_H_VERSION__
    
    
    #ifndef __hello_h__
    #define __hello_h__
    
    #if defined(_MSC_VER) && (_MSC_VER >= 1020)
    #pragma once
    #endif
    
    /* Forward Declarations */ 
    
    #ifdef __cplusplus
    extern "C"{
    #endif 
    
    void * __RPC_USER MIDL_user_allocate(size_t);
    void __RPC_USER MIDL_user_free( void * ); 
    
    #ifndef __hello_INTERFACE_DEFINED__
    #define __hello_INTERFACE_DEFINED__
    
    /* interface hello */
    /* [implicit_handle][unique][version][uuid] */ 
    
    void HelloProc( 
        /* [string][in] */ unsigned char *buffer,
        /* [string][in] */ unsigned char **matrix);
    
    void Shutdown( void);
    
    
    extern handle_t hello_IfHandle;
    
    
    extern RPC_IF_HANDLE hello_v1_0_c_ifspec;
    extern RPC_IF_HANDLE hello_v1_0_s_ifspec;
    #endif /* __hello_INTERFACE_DEFINED__ */
    
    /* Additional Prototypes for ALL interfaces */
    
    /* end of Additional Prototypes */
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif
    Errors:
    error LNK2001: unresolved external symbol _HelloProc
    fatal error LNK1120: 1 unresolved externals

  2. #2
    Join Date
    Apr 2009
    Posts
    598

    Re: Cant send array from client (WinAPI / Remote Procedure Call)

    error LNK2001: unresolved external symbol _HelloProc
    This message tells that your file, lab7_server.cpp, is not compiled or is not included in your project/makefile.

  3. #3
    Join Date
    Mar 2010
    Location
    Melbourne Australia
    Posts
    454

    Re: Cant send array from client (WinAPI / Remote Procedure Call)

    all this is that the linker cannot find , definition to procedure "_HelloProc" either define it or include relevant header file , along with

    #pragma comment(lib,"somelib.lib") // works only for VS

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured